在JavaScript中修复“0.1 + 0.2 = 0.300000004”

由于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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容