将 toFixed 添加到现有 Math.abs 函数
Adding toFixed To Existing Math.abs Function
我有一个我一直在尝试的函数,用于尝试显示某些带有文本后缀的较大基数。但是我想对其进行扩展,以便我可以调用 toFixed 来省略所有小数点 (toFixed(0))。我已经尝试了所有可能的组合和变量本身,但我似乎无法让它工作...
我不想显示小数的函数是:
function cardinalNumbers(numericalValue) {
// Twenty Four Zeroes For Septillions.
return Math.abs(Number(numericalValue)) >= 1.0e+24
? Math.abs(Number(numericalValue)) / 1.0e+24 + "S"
// Twnty One Zeroes For Sextillions.
: Math.abs(Number(numericalValue)) >= 1.0e+21
? Math.abs(Number(numericalValue)) / 1.0e+21 + "s"
// Eighteen Zeroes For Quintillions.
: Math.abs(Number(numericalValue)) >= 1.0e+18
? Math.abs(Number(numericalValue)) / 1.0e+18 + "Q"
// Fifteen Zeroes For Quadrillion.
: Math.abs(Number(numericalValue)) >= 1.0e+15
? Math.abs(Number(numericalValue)) / 1.0e+15 + "q"
// Twelve Zeroes For Trillions.
: Math.abs(Number(numericalValue)) >= 1.0e+12
? Math.abs(Number(numericalValue)) / 1.0e+12 + "T"
// Nine Zeroes For Billions.
: Math.abs(Number(numericalValue)) >= 1.0e+9
? Math.abs(Number(numericalValue)) / 1.0e+9 + "B"
// Six Zeroes For Millions.
: Math.abs(Number(numericalValue)) >= 1.0e+6
? Math.abs(Number(numericalValue)) / 1.0e+6 + "M"
// Three Zeroes For Thousands.
: Math.abs(Number(numericalValue)) >= 1.0e+3
? Math.abs(Number(numericalValue)) / 1.0e+3 + "K"
: Math.abs(Number(numericalValue));
}
例如 227155515434853440 格式为 227q。
您必须在返回值的每个点调用 .toFixed(0)
并且可能像 Bartek 建议的变量:
function cardinalNumbers(numericalValue) {
var x = Math.abs(Number(numericalValue));
// Twenty Four Zeroes For Septillions.
return x >= 1.0e+24
? (x / 1.0e+24).toFixed(0) + "S"
// Twnty One Zeroes For Sextillions.
: x >= 1.0e+21
? (x / 1.0e+21).toFixed(0) + "s"
// Eighteen Zeroes For Quintillions.
: x >= 1.0e+18
? (x / 1.0e+18).toFixed(0) + "Q"
// Fifteen Zeroes For Quadrillion.
: x >= 1.0e+15
? (x / 1.0e+15).toFixed(0) + "q"
// Twelve Zeroes For Trillions.
: x >= 1.0e+12
? (x / 1.0e+12).toFixed(0) + "T"
// Nine Zeroes For Billions.
: x >= 1.0e+9
? (x / 1.0e+9).toFixed(0) + "B"
// Six Zeroes For Millions.
: x >= 1.0e+6
? (x / 1.0e+6).toFixed(0) + "M"
// Three Zeroes For Thousands.
: x >= 1.0e+3
? (x / 1.0e+3).toFixed(0) + "K"
: x.toFixed(0);
}
或者,如果您可以使用数组并希望使用相同的构造,则可以使用一次 .toFixed(0)
。但是我不喜欢对那么多分支使用三元运算符,所以我宁愿使用 if-elseif-else 块:
function cardinalNumbers(numericalValue) {
var result = [];
var x = Math.abs(Number(numericalValue));
if (x >= 1.0e+24) {
// Twenty Four Zeroes For Septillions.
result = [x / 1.0e+24, "S"];
} else if (x >= 1.0e+21) {
// Twenty One Zeroes For Sextillions.
result = [x / 1.0e+21, "s"];
} else if (x >= 1.0e+18) {
// Eighteen Zeroes For Quintillions.
result = [x / 1.0e+18, "Q"];
} else if (x >= 1.0e+15) {
// Fifteen Zeroes For Quadrillion.
result = [x / 1.0e+15, "q"];
} else if (x >= 1.0e+12) {
// Twelve Zeroes For Trillions.
result = [x / 1.0e+12, "T"];
} else if (x >= 1.0e+9) {
// Nine Zeroes For Billions.
result = [x / 1.0e+9, "B"];
} else if (x >= 1.0e+6) {
// Six Zeroes For Millions.
result = [x / 1.0e+6, "M"];
} else if (x >= 1.0e+3) {
// Three Zeroes For Thousands.
result = [x / 1.0e+3, "K"];
} else {
result = [x, ""];
}
return result[0].toFixed(0) + result[1];
}
你原来的问题的答案是你需要在除法之后调用.toFixed(0)
,但在添加后缀之前:
( Math.abs(Number(numericalValue)) / 1.0e+9 ).toFixed(0) + "B"
但你一直在做同样的事情。这是某种循环的尖叫。
function cardinalNumbers(numericalValue) {
var suffixes = ['','K','M','B','T','q','Q','s','Q'];
var x = Math.abs(Number(numericalValue));
var sign = numericalValue / x;
var index = 0;
while ( x >= 1.0e3 ) {
x /= 1.0e3;
index++;
}
x *= sign;
return x.toFixed(0)+suffixes[index];
}
如果您的数字太大,这将 运行 出问题。您要么需要跳出循环,要么为更大的数字决定一些后缀。
我有一个我一直在尝试的函数,用于尝试显示某些带有文本后缀的较大基数。但是我想对其进行扩展,以便我可以调用 toFixed 来省略所有小数点 (toFixed(0))。我已经尝试了所有可能的组合和变量本身,但我似乎无法让它工作...
我不想显示小数的函数是:
function cardinalNumbers(numericalValue) {
// Twenty Four Zeroes For Septillions.
return Math.abs(Number(numericalValue)) >= 1.0e+24
? Math.abs(Number(numericalValue)) / 1.0e+24 + "S"
// Twnty One Zeroes For Sextillions.
: Math.abs(Number(numericalValue)) >= 1.0e+21
? Math.abs(Number(numericalValue)) / 1.0e+21 + "s"
// Eighteen Zeroes For Quintillions.
: Math.abs(Number(numericalValue)) >= 1.0e+18
? Math.abs(Number(numericalValue)) / 1.0e+18 + "Q"
// Fifteen Zeroes For Quadrillion.
: Math.abs(Number(numericalValue)) >= 1.0e+15
? Math.abs(Number(numericalValue)) / 1.0e+15 + "q"
// Twelve Zeroes For Trillions.
: Math.abs(Number(numericalValue)) >= 1.0e+12
? Math.abs(Number(numericalValue)) / 1.0e+12 + "T"
// Nine Zeroes For Billions.
: Math.abs(Number(numericalValue)) >= 1.0e+9
? Math.abs(Number(numericalValue)) / 1.0e+9 + "B"
// Six Zeroes For Millions.
: Math.abs(Number(numericalValue)) >= 1.0e+6
? Math.abs(Number(numericalValue)) / 1.0e+6 + "M"
// Three Zeroes For Thousands.
: Math.abs(Number(numericalValue)) >= 1.0e+3
? Math.abs(Number(numericalValue)) / 1.0e+3 + "K"
: Math.abs(Number(numericalValue));
}
例如 227155515434853440 格式为 227q。
您必须在返回值的每个点调用 .toFixed(0)
并且可能像 Bartek 建议的变量:
function cardinalNumbers(numericalValue) {
var x = Math.abs(Number(numericalValue));
// Twenty Four Zeroes For Septillions.
return x >= 1.0e+24
? (x / 1.0e+24).toFixed(0) + "S"
// Twnty One Zeroes For Sextillions.
: x >= 1.0e+21
? (x / 1.0e+21).toFixed(0) + "s"
// Eighteen Zeroes For Quintillions.
: x >= 1.0e+18
? (x / 1.0e+18).toFixed(0) + "Q"
// Fifteen Zeroes For Quadrillion.
: x >= 1.0e+15
? (x / 1.0e+15).toFixed(0) + "q"
// Twelve Zeroes For Trillions.
: x >= 1.0e+12
? (x / 1.0e+12).toFixed(0) + "T"
// Nine Zeroes For Billions.
: x >= 1.0e+9
? (x / 1.0e+9).toFixed(0) + "B"
// Six Zeroes For Millions.
: x >= 1.0e+6
? (x / 1.0e+6).toFixed(0) + "M"
// Three Zeroes For Thousands.
: x >= 1.0e+3
? (x / 1.0e+3).toFixed(0) + "K"
: x.toFixed(0);
}
或者,如果您可以使用数组并希望使用相同的构造,则可以使用一次 .toFixed(0)
。但是我不喜欢对那么多分支使用三元运算符,所以我宁愿使用 if-elseif-else 块:
function cardinalNumbers(numericalValue) {
var result = [];
var x = Math.abs(Number(numericalValue));
if (x >= 1.0e+24) {
// Twenty Four Zeroes For Septillions.
result = [x / 1.0e+24, "S"];
} else if (x >= 1.0e+21) {
// Twenty One Zeroes For Sextillions.
result = [x / 1.0e+21, "s"];
} else if (x >= 1.0e+18) {
// Eighteen Zeroes For Quintillions.
result = [x / 1.0e+18, "Q"];
} else if (x >= 1.0e+15) {
// Fifteen Zeroes For Quadrillion.
result = [x / 1.0e+15, "q"];
} else if (x >= 1.0e+12) {
// Twelve Zeroes For Trillions.
result = [x / 1.0e+12, "T"];
} else if (x >= 1.0e+9) {
// Nine Zeroes For Billions.
result = [x / 1.0e+9, "B"];
} else if (x >= 1.0e+6) {
// Six Zeroes For Millions.
result = [x / 1.0e+6, "M"];
} else if (x >= 1.0e+3) {
// Three Zeroes For Thousands.
result = [x / 1.0e+3, "K"];
} else {
result = [x, ""];
}
return result[0].toFixed(0) + result[1];
}
你原来的问题的答案是你需要在除法之后调用.toFixed(0)
,但在添加后缀之前:
( Math.abs(Number(numericalValue)) / 1.0e+9 ).toFixed(0) + "B"
但你一直在做同样的事情。这是某种循环的尖叫。
function cardinalNumbers(numericalValue) {
var suffixes = ['','K','M','B','T','q','Q','s','Q'];
var x = Math.abs(Number(numericalValue));
var sign = numericalValue / x;
var index = 0;
while ( x >= 1.0e3 ) {
x /= 1.0e3;
index++;
}
x *= sign;
return x.toFixed(0)+suffixes[index];
}
如果您的数字太大,这将 运行 出问题。您要么需要跳出循环,要么为更大的数字决定一些后缀。