Lors de l'écriture d'un test avec une valeur qui est représentée comme BigDecimal, j'ai rencontré quelque chose de bizarre et j'ai décidé de creuser dedans. En bref, '0.00009', arrondi à deux décimales, est renvoyé à 0.01 au lieu de 0.00. Vraiment. Voici mon script/capture de la console:Ruby BigDecimal Round: Est-ce une erreur?
>> 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, et je reçois les mêmes résultats si j'utilise le mode par défaut, comme ceci:
>> bd = BigDecimal('0.00009')
=> #<BigDecimal:2152ed8,'0.9E-4',4(12)>
>> bd.round(2).to_f
=> 0.01
Voici mes versions:
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin9.2.2]
Rails 2.3.4
Est-ce que quelqu'un a déjà vu quelque chose comme ça?
Je ne peux pas le reproduire dans mon environnement 1.8.7 (ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]) – bryantsai