在JavaScript中,两个浮点数直接相加(如4.2+9.2)常出现精度丢失,结果显示为13.399999999999998而非预期的13.4。这是由于IEEE 754标准导致的二进制表示误差。通过Number((a+b).toFixed(2))可将结果保留指定位小数,从而获得精确的数值输出。
JavaScript浮点数相加精度问题
例如执行 Number(4.2)+Number(9.2) 的计算。
此时通过 alert 弹出的结果为 13.399999999999998,这是为什么?
再例如执行 Number(2.2)+Number(9.7)。
alert 弹出的结果同样为 11.899999999999998。
然而像 Number(2.3)+Number(9.9) 这样的计算。
alert 弹出的结果是 12.2,这正是我们期望得到的精确值。
为什么部分数值相加会产生大量多余的小数位,而另一些则没有?
具体代码如下:
<html>
<head></head>
<body>
<script>
var a=4.2;
var b=9.2;
alert(Number((a+b).toFixed(2)));
</script>
</body>
</html>