为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2021-04-13 17:18:38
我有这个功能,它将所有数字四舍五入到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 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您是否尝试过固定?


var num = 0.00000002473;

var n = num.toFixed(8);

//n contains 0.00000002


查看完整回答
反对 回复 2021-04-22
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

原因是,这0.00000003不存在。因此,您永远无法将数字四舍五入到该值。扫描时,将其二进制四舍五入到最接近的可能数字。toPrecision(18)显示更精确的数字:

(0.00000003).toPrecision(18) // "2.99999999999999973e-8"

这就是为什么toFixed()返回字符串而不是数字的原因。换句话说:不可能将数字四舍五入到精确的8个十进制数字,除非它是基于二进制的数字,例如0.5、0.125


查看完整回答
反对 回复 2021-04-22
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信