Ruby 1.8.7将9,95 float转换为994 int

时间:2013-09-23 16:13:36

标签: ruby floating-point

怪异..

$ (9.95*100).to_i
=> 994

然后,

$ (9.95*100).round.to_i
=> 995

似乎浮点值是(大约)9.9499999 ......和

to_i

砍掉十进制值,即994。

但有人知道为什么吗?

2 个答案:

答案 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