我正在尝试编写一个(vanilla javascript)函数,将数字数组四舍五入到最接近的100(如果超过一千),以及最接近的100K(如果超过一百万),然后 chop 和符号。所以像这样的数组...
[ 1158298, 949000, 1493, 51232, 12501, 8426 ]
...将返回此:
1.2M、950K、1.5K、51K、13K、8.5K
这个解决方案适用于数百万个实例,但感觉非常复杂,并且不能处理所有实例。我可以使用 if/else 并编写三个版本,但似乎有一个更优雅的解决方案?
function round(num){
var roundNum = (Math.round(((num/100000).toFixed(2))) * .1).toFixed(1) + "M"
return roundNum
}
console.log(round(1158298));
最佳答案
您可以使用 10 的对数来获得位置。然后除以 3
得到正确的后缀。
function fn(v) {
var p = Math.floor(Math.log(v) / Math.LN10),
l = Math.floor(p / 3);
return (Math.pow(10, p - l * 3) * +(v / Math.pow(10, p)).toFixed(1)) + ' ' + ['', 'K', 'M'][l];
}
var data = [1158298, 949000, 1493, 51232, 12501, 8426];
console.log(data.map(fn));
关于javascript - Vanilla javascript 函数四舍五入到最接近的百或 100K,加上符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42658221/