我有以下代码:迭代通过浮点数红宝石
float_number = 0.01
while first_number < 0.10 do
float_number += 0.01
puts first_number
end
这导致:
0.02 0.03 0.04 0.05 0.060000000000000005 0.07 0.08 0.09 0.09999999999999999 0.10999999999999999
这是八九不离十正确的。有没有一种有效的方法来确保我没有得到一堆额外的数字?
作为输出显示,有更多的东西怎么回事。浮点数并不总是100%精确到十进制数。这不是很容易解决,所以你在寻找什么 - 不错的输出,完美的精确1/100秒,还是别的什么? –
使用['Float#round'](http://www.ruby-doc.org/core-1.9.3/Float.html#method--round) - 例如'(0.060000000000000005).round(2)#=> 0.06'(精确到百分之一) – iamnotmaynard
如果你问为什么它首先给你'0.060000000000000005'而不是'0.06',另请参见本网站上的所有问题关于浮点值和[每个计算机科学家应该知道的关于浮点运算的知识](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) – iamnotmaynard