怪异..
$ (9.95*100).to_i
=> 994
然后,
$ (9.95*100).round.to_i
=> 995
似乎浮点值是(大约)9.9499999 ......和
to_i
砍掉十进制值,即994。
但有人知道为什么吗?
答案 0 :(得分:3)
在此处详细了解有关问题的详细信息:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
简短版本:永远不要使用浮动作为货币的代表。
答案 1 :(得分:0)
你对#round的调用是从它的内部表示“向上”四舍五入,这是一个稍微不准确的数字,就在它之下。所以一个工作,而直接调用#to_i只是(总是)截断,所以它看到994.99999并将其截断为994.使用Ruby 1.9.x +它更明显地显示(更好或更坏),所以你可以看到什么是继续。
>> 9.95*100
=> 994.9999999999999
>> (9.95*100).round
=> 995