我有以下代碼:迭代通過浮點數紅寶石
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