Javascript - 将 float 四舍五入到最接近的非零数字的最有效方法

标签 javascript algorithm floating-point rounding logarithm

我想用(至少)2 位有效数字对 Javascript 中的 float 进行四舍五入。

例如,具有以下所需结果:

roundOff(0.000000001124)  // 0.0000000011 or 1.1e-9 (both acceptable)
roundOff(1.423421)  // 1.42
roundOff(0.00053245)  // 0.00053
roundOff(422.243224)  // 422.24
roundOff(422.0000000123)  // 422.00

我知道我可以使用对数和舍入来做类似的事情 here ,但它会四舍五入更大的数字,例如 -123.0 -> -100

有什么聪明的基于 Javascript 的解决方案吗?

最佳答案

如果我理解正确的话,您需要一个函数,对于绝对值小于 1 的数字返回两位有效数字,或者对于绝对值大于 1 的数字返回两位小数。

我仍然不明白为什么您认为 0.000000001124 应该四舍五入为 0.0000000012。您的意思是改写 0.0000000011 吗?

如果是这样,这个函数应该做你想要的:

function roundOff(n) {
  return parseFloat(n.toExponential(Math.max(1,2+Math.log10(Math.abs(n)))));
}

示例:

var a = new Array(0.000000001124, 1.423421, 0.00053245, 422.243224,
                  422.0000000123, 123, -123);
for (i=0; i<7; i++) console.log(roundOff(a[i]));

输出:

1.1e-9
1.42
0.00053
422.24
422
123
-123

关于Javascript - 将 float 四舍五入到最接近的非零数字的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842250/

相关文章:

javascript - 样式在第二张表中不起作用

arrays - 查找在线性时间内出现超过 n/4 次的所有元素

Java Unique Number Generator 碰撞测试内存不足

c++ - 将 c++ vector<float> 复制到 Obj-C Float32 数组的最快方法

c++ - 指针变量在数组内使用float计算平均值C++

javascript - Mongoose 保存请求正文中的所有参数

php - JS和PHP建站验证有设计模式吗?

javascript - 尝试 Eval() 时解析器错误

algorithm - 填充最大数据 block

c - 浮点值与另一个翻译单元中使用的函数不同