深究JavaScriptJavaScript

在JavaScript中修复“0.1 + 0.2 = 0.300

2018-04-04  本文已影响9人  丘比特爱上猫

由于JavaScript 对Math使用IEEE 754 标准,因此它使用64位浮点数。这在执行浮点(十进制)计算时会导致精度错误,简而言之,由于计算机是二进制运算,而不是十进制。

0.1 + 0.2; // 0.300000004 
// 0.1 ===> 0.0001100110011001100110011001100110011001100110011001101     
// 0.2 ===> 0.001100110011001100110011001100110011001100110011001101
// 连个二进制相加 ===> 0.0100110011001100110011001100110011001100110011001100111 转换为十进制 0.30000000000000004
// 就是因为0.0100110011001100110011001100110011001100110011001100111最后的一位1 导致0.00000000000000004
image.png
image.png

这个问题的一个简单的解决方案是:

+(0.1 + 0.2).toFixed(1); // 0.3 (保留小数点后一位)

这里的数字加在一起,返回错误的浮点数,然后将其设置toFixed为字符串"0.3"。最后,+符号将字符串转换回有效状态,Number以便可以再次处理它。

var x = 0.1,
    y = 0.2;
var z = +(x + y).toFixed(1);
z += 0.1; // z is now 0.4
上一篇下一篇

猜你喜欢

热点阅读