Bir BigDecimal olarak temsil edilen bir değerle bir test yazarken garip bir şeyle karşılaştım ve kazmaya karar verdim. Kısaca, iki ondalık basamağa yuvarlandığında '0.00009', 0.00 yerine 0.01 olarak döndürülür. Gerçekten mi. İşte benim komut/konsol yakalama var:Ruby BigDecimal Round: Bu bir hata mı?
>> bp = BigDecimal('0.09')
=> #<BigDecimal:210fe08,'0.9E-1',4(8)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.09
>> bp = BigDecimal('0.009')
=> #<BigDecimal:210bcf4,'0.9E-2',4(8)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.0009')
=> #<BigDecimal:2107a8c,'0.9E-3',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0
>> bp = BigDecimal('0.00009')
=> #<BigDecimal:2103428,'0.9E-4',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.000009')
=> #<BigDecimal:20ff0f8,'0.9E-5',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0
Oh, ve varsayılan modunu kullanmak eğer şöyle, aynı sonuçları elde:
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin9.2.2]
Rails 2.3.4
: Burada
>> bd = BigDecimal('0.00009')
=> #<BigDecimal:2152ed8,'0.9E-4',4(12)>
>> bd.round(2).to_f
=> 0.01
benim sürümleridir
Böyle bir şey gören oldu mu?
Bunu 1.8.7 ortamımda yeniden üretemiyorum (ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]) – bryantsai