2011-03-24 18 views
7

0.1+0.2 eklediğimde 0.30000000000000004 alıyorum ama aynı sayıyı ruby 1.8.7'a eklediğimde doğru yanıtı 0.3 alıyorum. Ben yuvarlayarak 0.3 olsun ama sadece 0.1 ve 0.2ruby-1.9.2 ile eklenme hatası

+0

olası çift [yakut: Ruby tamsayı şamandıra dönüştürme garip sonuçlar üretir] (http://stackoverflow.com/questions/5255629/ruby

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

renkli Aşağıda -Çevreden-için-tamsayı-içinde-ruby-üretir-garip-sonuçlar) –

cevap

11

İş yapmak için bunun için büyük boyutlu olması gerekir.

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

+3

'" Ruby'nin hatası olduğu için "- bu bir hata değil - kayan nokta nasıl çalışır - bir hata olarak iddia eden hata raporu reddedildi olarak işaretlendi. –

+0

Teşekkürler Andrew .. – a5his

7

Eski yakut sana yalan ekleyerek ruby 1.9.2 üzerinde 0.3 almak istiyorum:

$ 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 çok zor hayvanlardır.

+2

Bu ilginç bir kavramdır: Size yalan söyledi ve size doğru cevabı verdim, bunu yapmamalıydı. Kayan nokta _is_ eğlence! –

+0

@Andrew Marshall, güldüğünüz için teşekkürler. :) – sarnold

+2

Ben ruble-1.8.7-head kullanıyordum, patchlevel değil. –