Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
Javascript基础进阶:二进制浮点数和四舍五入错误,希望能够帮助你!!!。
实数有无数个,但Javascript通过浮点数的形式只能表示其中有限的个数(精确的说是:个)。也就是说,当在Javascript中使用实数的时候,常常只是真实值的一个近似表示。
Javascript采用了IEEE-754浮点数表示法(几乎所有现代编程语言所采用),这是一种二进制表示法,可以精确地表示分数,例如:1/3,1/6,1/9等。但遗憾的是,我们常用的分数,特别是在金融计算方面,都是十进制分数,如:1/10、1/100等。二进制浮点数表示法并不能精确表示类似0.1类似于这样的数字。
Javascript中数字具有足够的精度,并可以极其近似于0.1。但事实是数字不能精确表述的确带来了一些问题,例如以下这些代码:
var x = 0.3 - 0.2; //0.3减去0.2
var y = 0.2 - 0.1; //0.2减去0.1
x == y; //值返回false ,这两个值其实是不相等的!!!
再看看这下面两段代码:
x == 0.1 //值返回false ,0.3-0.2 不等于 0.1
y == 0.1 //值返回true ,0.2-0.1等于0.1
由于舍入误差,0.3和0.2之间的近似差值实际上不等于0.2和0.1之间的近似差值。这个我问题并不只是在Javascript中出现,这点非常重要,在任何使用二进制浮点数的编程语言中都会出现这个问题。但需要注意的是:以上代码中x和y的值非常接近最终的正确值。这种计算结果可以胜任大多数的计算任务,这个问题也只有在比较两个值是否相等的时候才会出现。
Javascript的未来版本可能会支持十进制数字类型,从而避免这些舍入的问题。在这之前建议尽量使用大整数进行重要的计算。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。