2011-03-24 100 views
7

當我加0.1+0.2我得到0.30000000000000004,但是當我在ruby 1.8.7中添加相同的數字時,我得到正確的答案0.3。我得到0.3四捨五入,但我只是想通過添加0.10.2紅寶石加法錯誤-1.9.2

+0

的可能重複的[紅寶石:從浮點數轉換成整數中紅寶石產生奇怪的結果](http://stackoverflow.com/questions/5255629/ruby從浮點轉換到整數在紅寶石產生奇怪的結果) – 2011-03-24 22:15:12

回答

11

您需要bigdecimal才能完成工作。

 
(BigDecimal('0.1') + BigDecimal("0.2")).to_f 

見下面鏈接:

http://redmine.ruby-lang.org/issues/4394

+3

''因爲它是ruby的bug「' - 這不是一個錯誤 - 它是浮點運算的方式 - 聲稱這是一個bug的bug報告被標記爲拒絕。 – 2011-08-18 05:20:49

+0

謝謝安德魯.. – a5his 2011-08-18 10:15:16

7

你的老紅寶石騙你得到ruby 1.9.20.3

$ ruby -v 
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux] 
$ irb 
irb(main):001:0> printf("%40.40f\n", 0.1 + 0.2) 
0.3000000000000000444089209850062616169453 
=> nil 

Floating point numbers是非常棘手的野獸。

+2

這是一個有趣的概念:它騙了你,並給你正確的答案,它不應該做到這一點。浮點_s_有趣! – 2011-03-24 06:04:28

+0

@安德魯馬歇爾,謝謝你的歡笑。 :) – sarnold 2011-03-24 06:06:56

+2

我使用紅寶石1.8.7頭,而不是patchlevel。 – 2011-03-24 06:13:27