javascript - 浮点 0.2 + 0.1 舍入误差

标签 javascript floating-point

Possible Duplicate:
Is JavaScript's Math broken?

我遇到了这个舍入问题:

当我这样做时:

 .2  + .1 results in 0.30000000000000004
 .7  + .1 results in 0.7999999999999999
1.1  + .1 results in 1.2000000000000002

等等...

谁能解释一下(详细)为什么?可能是一些二进制舍入的东西。但我真的想知道会发生什么......

最佳答案

简而言之,因为 .2 实际上并不是 .2;它实际上是最接近的可表示的 double ,即

0.200000000000000011102230246251565404236316680908203125.

同样,.1确实是

0.1000000000000000055511151231257827021181583404541015625

当您将它们加在一起时,结果将再次四舍五入到最接近的可表示数字,即

0.3000000000000000444089209850062616169452667236328125

最后,当您打印出来时,该数字将四舍五入到小数点后 17 位,给出您观察到的结果。

您的其他示例遵循相同的模式。

关于javascript - 浮点 0.2 + 0.1 舍入误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318283/

相关文章:

javascript - 无法正确使用 .next 和 .closest

javascript - 可以改进此代码以避免内存泄漏或更稳定吗?

floating-point - 与浮点减法相等的圆关系

c++ - 如何在特定机器上找到尾数长度?

javascript - Mongoose "Schema hasn' t 已注册”尝试填充时出错

javascript - 插入数组

floating-point - NaN != NaN 的直观原因是什么?

mysql - Coldfusion 数据库插入将长数值更改为科学计数法

javascript - Angular ngrx 属性 'payload' 在类型 'Action' 上不存在

c++ - 公式一样,为什么输出不一样?