2010-09-26 77 views
0

Je viens de passer ma version Ruby à 1.9.2, et le code BigDecimal fonctionne dans Ruby 1.8 ne fonctionne plus. Voici le code de test montre ce qui s'est passéRuby BigDecimal génère un nombre flottant simple?

irb(main):001:0> require 'bigdecimal' 
=> true 
irb(main):002:0> (BigDecimal.new("1")/BigDecimal.new("3")).to_s("F") 
=> "0.33333333" 
irb(main):003:0> (BigDecimal.new("1", 20)/BigDecimal.new("3", 20)).to_s("F") 
=> "0.33333333" 

Problème avec mon installation Ruby? Sinon, je pense que même dans Ruby 1.9, au-dessus du code de test devrait encore fonctionner, que se passe-t-il ici?

+1

Quel est le problème - ne montre-t-il pas assez de décimales? –

+0

Oui, j'essaie d'obtenir plus de décimales, et il ne peut produire que 8 chiffres significatifs. J'ai également essayé d'utiliser le constructeur pour spécifier que je veux 20 chiffres significatifs, mais ne fonctionne pas aussi bien. –

Répondre

2

Semble des changements dans Ruby 1.9 make '/' n'obtiendra pas les chiffres significatifs spécifiés à partir de deux opérandes, ce qui fonctionne dans Ruby 1.8.

code ci-dessus ne fonctionnerait pas parce que deux opérandes pour «/» n'aura sur digitals importantes, et faire flotter num et flotter num toujours générer des résultats float en utilisant la méthode «/».

Au lieu de cela, dans cette situation, je devrais utiliser div (valeur, chiffres)

(BigDecimal.new("1", 20).div(BigDecimal.new("3", 20), 50)).to_s("F") 
=> "0.33333333333333333333333333333333333333333333333333" 

Espoir qui ont du sens.

+0

donc est-ce un bug ou non? – rogerdpack