2013-12-09 183 views
0

我有以下代碼:迭代通過浮點數紅寶石

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 

這是八九不離十正確的。有沒有一種有效的方法來確保我沒有得到一堆額外的數字?

+0

作爲輸出顯示,有更多的東西怎麼回事。浮點數並不總是100%精確到十進制數。這不是很容易解決,所以你在尋找什麼 - 不錯的輸出,完美的精確1/100秒,還是別的什麼? –

+1

使用['Float#round'](http://www.ruby-doc.org/core-1.9.3/Float.html#method--round) - 例如'(0.060000000000000005).round(2)#=> 0.06'(精確到百分之一) – iamnotmaynard

+0

如果你問爲什麼它首先給你'0.060000000000000005'而不是'0.06',另請參見本網站上的所有問題關於浮點值和[每個計算機科學家應該知道的關於浮點運算的知識](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) – iamnotmaynard

回答

2
+0

@iamnotmaynard其實,新版本的標準庫http://ruby-doc.org/stdlib-2.0.0/libdoc/bigdecimal/rdoc/ – Arantir

+0

啊。我懂了。那麼非常好。您應該將該鏈接添加到您的答案中。 – iamnotmaynard

+0

@iamnotmaynard其實,並非如此新鮮http://ruby-doc.org/stdlib-1.8.7/libdoc/bigdecimal/rdoc/BigDecimal.html – Arantir