2011-03-24 7 views
7

Cuando agrego 0.1+0.2 obtengo 0.30000000000000004 pero cuando agrego el mismo número en ruby 1.8.7 obtengo la respuesta correcta 0.3. Consigo 0.3 redondeando pero sólo quiero conseguir 0.3 en ruby 1.9.2 añadiendo 0.1 y 0.2Error de adición con ruby-1.9.2

+0

posible duplicado de [rubí: la conversión de flotador para número entero en rubí produce resultados extraños] (http://stackoverflow.com/questions/5255629/ruby -converting-from-float-to-integer-in-ruby-produces-strange-results) –

Respuesta

11

Necesita bigdecimal para que esto funcione.

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

Consulte a continuación enlace:

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

+3

'" ya que es el error de ruby ​​"' - esto no es un error - es cómo funciona el punto flotante - el informe de error afirma que este error se marcó como rechazado. –

+0

gracias Andrew ... – a5his

7

Su edad rubí mintió:

$ 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 son animales muy difíciles.

+2

Esa es una noción interesante: te mintió y te dio la respuesta correcta, no debería haberlo hecho. ¡Punto flotante es divertido! –

+0

@ Andrew Marshall, gracias por la risa. :) – sarnold

+2

Estaba usando ruby-1.8.7-head, no patchlevel. –

Cuestiones relacionadas