javascript之小数运算

来源:互联网 发布:卡梅伦与猪 知乎 编辑:程序博客网 时间:2024/05/01 18:12

 前几天做了几个关于管井的统计页面,项目要求,如果是月,按米计算,如果是季度或是年则按照公里计算,中间出现了如下错误。

如上图,希望得到的结果是1.146 然而这个 0.000.......1来自哪里呢??

第一反应是小数计算bug,但是时间紧来不及细细研究于是先相加后除以1000 暂时解决了问题。

问题是得到了解决,但是为什么会出现这种bug呢?

js 不能正确处理小数运算,包括其它高级编程语言一样,这不是语言本身的设计错误,而是计算机内部本身就不能正确处理小数的运算,对小数的运算往往会得到意想不到的结果,因为并不是所有的十进制小数能被二进制表示。

程序中的数据都会被转换成二进制数,小数参与运算时,也会被转成二进制,如十进制的11.1875 会被转换成1101.0010。

小数点后 4 位用二进制数表示的数值范围是 0.0000~0.1111,因此,这只能表示 0.5、0.25、0.125、0.0625 这四个十进制数以及小数点后面的位权组合(相加)而成的小数:

这样1.112+0.034=1.146000000.。。。1得到这个结果应该也不稀奇了。


0 0
原创粉丝点击