浮动的奇怪结果

Alb*_*ert 0 ruby

1.824999999999999.round(2)
# => 1.82
1.82499999999999999.round(2)
# => 1.83
Run Code Online (Sandbox Code Playgroud)

我不明白为什么第一种情况的结果是1.82和后者的结果1.83.我希望的结果是1.82两种情况.

saw*_*awa 6

众所周知,计算机中的浮点数有错误.请注意,您拥有的两个数字都接近1.825.在您的第一种情况下,该数字足够小,可以区分1.825.

1.824999999999999
# => 1.824999999999999
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,有足够的9s使得值足够接近,可以完全被认为1.825:

1.82499999999999999
# => 1.825
Run Code Online (Sandbox Code Playgroud)

然后,当你申请时round,你得到1.83.