将数字四舍五入到小数点后8位

时间:2019-04-08 02:31:52

标签: javascript floating-point

我有这个函数,它将所有数字四舍五入到8位小数。

exports.roundDown = function(number, decimals) {
  try {
    if (!exports.isNumeric(number)) {
      return number;
    }

    decimals = decimals || 8;

    if (!exports.isNumeric(decimals)) {
      return number;
    }

    const ret =  ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals)*1);

    return ret; //(ret < 0.000001) ? 0 : ret;
  } catch(e) {
    return number;
  } 
}

我的问题是,将0.00000003之类的数字四舍五入为0.00000002,而不是发送实数(0.00000003),其他数字也可以正常工作。

有什么解决方法吗?

2 个答案:

答案 0 :(得分:2)

您是否尝试过tofixed?

var num = 0.00000002473;
var n = num.toFixed(8);
//n contains 0.00000002

答案 1 :(得分:1)

原因是auto child = bp::child(boost::filesystem::path("C:\\Foo Bar\\batch.bat"), 不存在。因此,您永远无法将数字四舍五入到该值。扫描时,将其二进制舍入到最接近的可能数字。 0.00000003显示的数字更准确:

toPrecision(18)

这就是(0.00000003).toPrecision(18) // "2.99999999999999973e-8" 返回字符串而不是数字的原因。换句话说:不可能将数字四舍五入到精确的8位小数,除非它是基于二进制的数字,例如0.5、0.125