javascript - Vanilla javascript 函数四舍五入到最接近的百或 100K,加上符号

标签 javascript math concatenation rounding

我正在尝试编写一个(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/

相关文章:

python - 楼层划分

c++ - 如何解析质数的倍数 C++?

c++ - Matrix Hell - 将 3D 纹理中的点转换为世界空间

javascript - 在一个字符串中连接对象数据

Javascript MomentJs 错误输出

javascript - 我如何强制客户端刷新在 Node.js 中使用 Jade 呈现的 JavaScript/CSS 文件?

javascript - 单击外部区域时关闭移动菜单

mysql - 如果字段 'a' 像 'varchar' = true 那么 concat 'varchar, ' 预定的 string1'

hadoop - HIVE 中 ALTER TABLE 命令中的 CONCATENATE 如何工作

javascript - 模型不可用于 ViewSettingsCustomItem 中的自定义控件