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

我有这个功能,它将所有数字四舍五入到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),其他数字也可以正常工作。


任何想法如何解决这个问题?


侃侃尔雅
浏览 158回答 2
2回答

猛跑小猪

您是否尝试过固定?var num = 0.00000002473;var n = num.toFixed(8);//n contains 0.00000002

眼眸繁星

原因是,这0.00000003不存在。因此,您永远无法将数字四舍五入到该值。扫描时,将其二进制四舍五入到最接近的可能数字。toPrecision(18)显示更精确的数字:(0.00000003).toPrecision(18)&nbsp;//&nbsp;"2.99999999999999973e-8"这就是为什么toFixed()返回字符串而不是数字的原因。换句话说:不可能将数字四舍五入到精确的8个十进制数字,除非它是基于二进制的数字,例如0.5、0.125
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript