修复我的函数以使用附加的 Million, Billion, Thousandth 字符串转换大整数更具可读性
Posted
技术标签:
【中文标题】修复我的函数以使用附加的 Million, Billion, Thousandth 字符串转换大整数更具可读性【英文标题】:Fixing my function to transform large integers more readable with their appended Million, Billion, Thousandth string 【发布时间】:2021-03-14 21:41:13 【问题描述】:我有这个函数可以将大数字转换成人眼更易读的东西: 10,000,000 = 10M 10,000,000,000 = 10B
但是,当大数为 100(磨机,账单,千分之一)时,就会出现问题。
200,000,000,000 转换为 0.2 t(万亿),我希望它转换为 200B,而不是十进制格式。这与千亿、百万、千等中的任何数字相同...
function convrt(val)
// thousands, millions, billions etc..
var s = ["", "k", "M", "B", "t"];
// dividing the value by 3.
var sNum = Math.floor(("" + val).length / 3);
// calculating the precised value.
var sVal = parseFloat((
sNum != 0 ? (val / Math.pow(1000, sNum)) : val).toPrecision(2));
if (sVal % 1 != 0)
sVal = sVal.toFixed(1);
// appending the letter to precised val.
return sVal + s[sNum];
如何用上面的代码解决这个问题?
【问题讨论】:
【参考方案1】:尝试使用循环。 您可以添加数字小数部分的格式。
function convrt(number)
postfixes = ['', 'k', 'M', 'B', 't']
count = 0
while (number >= 1000 && count < postfixes.length)
number /= 1000
count++
return number + postfixes[count];
注意。您可以通过剪切数字字符串来做到这一点(每个循环都需要去除字符串的最后 3 个字符,直到字符串的长度小于 4 个字符)。但是在这种情况下,如果需要,小数部分会比较困难。
【讨论】:
【参考方案2】:另一种方法
// Function
const convrt = (n) =>
const matrix =
"t": 1.0e+12,
"B": 1.0e+9,
"M": 1.0e+6,
"k": 1.0e+3,
"": 1.0e+0
;
// Loop through matrix and return formatted value
for(const k in matrix)
if(Math.abs(Number(n)) >= matrix[k])
return Math.round(Number(n) / matrix[k]) + k;
;
// Demo
console.log(convrt(215));
console.log(convrt(45145));
console.log(convrt(-6845215));
console.log(convrt(92674883122));
console.log(convrt(2192674883122));
【讨论】:
很难解决,尤其是对他来说。并且不要使用小数部分。但这很好,因为它适用于负数。 好吧,他从字面上问:“......而不是十进制格式......”)以上是关于修复我的函数以使用附加的 Million, Billion, Thousandth 字符串转换大整数更具可读性的主要内容,如果未能解决你的问题,请参考以下文章
如何修复我的部分中的元素数组。当我调用函数时它不会显示我的工作......?