网上有许多精确运算的案例,但是在实操过程中js加减出现0.00000000001和1.9999999999仍旧是个问题。现有临时解决方案(非金额计算时候可用)
方法1
let sum = 3.141592600000001
sum = (parseFloat(sum.toFixed(6)))
原理:取6位小数(平时够你用了)然后转换为小数类型
输出结果:
3.141593
方法2
Math.round(X * 100) / 100
原理:取6位小数(平时够你用了)然后转换为小数类型
输出结果:
3.14
注意:
tofixed()和round()的区别:
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则。
银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:
简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
显然这种规则不符合我们平常在数据中处理的方式。为了解决这样的问题,可以自定义去使用Math.round方法进行自定义式 的实现指定保留多少位数据进行处理。
round() 方法可把一个数字舍入为最接近的整数。
例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。对于小数的处理没有那么便捷,但是可以根据不同的要求,进行自定义的处理。
例如:对于X进行保留两位小数的处理,则可以使用Math.round(X * 100) / 100.进行处理。
本文探讨了JavaScript中浮点数运算遇到的0.00000000001误差问题,介绍了两种临时解决方案:方法一是通过`toFixed`四舍六入并转换为小数类型,方法二是利用`Math.round`进行自定义精度控制。同时,对比了`toFixed`与`round`的差异,并提供了适用场景和实例。

3万+

被折叠的 条评论
为什么被折叠?



