在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