欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js toFixed()方法的坑

程序员文章站 2022-04-09 17:34:39
javascript中toFixed使用的是银行家舍入规则。 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。但是不论引入toFixed解决浮点数计算精度缺失的问题也好, ......

javascripttofixed使用的是银行家舍入规则。

银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。

简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。但是不论引入tofixed解决浮点数计算精度缺失的问题也好,它有没有使用银行家舍入法也罢,都是为了解决精度的问题,但是又离不开二进制浮点数的环境,但至少他帮助我们找到了问题所在,从而让我们有解决方法。

 

一:四舍五入并不是真正的四舍五入

 

这个问题是在测试阶段我们的测试人员提出来的。一开始我也很吃惊,结果待我在控制台试了一些数据之后,我懵逼了,我一直在用的tofixed方法竟然有问题

 

chrome上的测试结果

 

 

 

1.35.tofixed(1) // 1.4 正确

 

1.335.tofixed(2) // 1.33 错误

 

1.3335.tofixed(3) // 1.333 错误

 

1.33335.tofixed(4) // 1.3334 正确

 

1.333335.tofixed(5)  // 1.33333 错误

 

1.3333335.tofixed(6) // 1.333333 错误

 

ie上的测试结果:

 

1.35.tofixed(1) // 1.4 正确

 

1.335.tofixed(2) // 1.34  正确

 

1.3335.tofixed(3) // 1.334 正确

 

1.33335.tofixed(4) // 1.3334 正确

 

1.333335.tofixed(5)  // 1.33334 正确

 

1.3333335.tofixed(6) // 1.333334 正

我个人的解决方法numformat 为千分位方法

 

numformat(math.round(money*100/100).tofixed(2))

 

如果您觉得文章有用,可以打赏个咖啡钱

js toFixed()方法的坑

 js toFixed()方法的坑