Comportamiento extraño de ruby

Hola, soy nuevo por acá, quisiera ver si me pueden orientar por que
sucede algo tan extraño en una operación básica de resta.

irb(main):010:0> a=210
=> 210
irb(main):011:0> a=a.to_f-166.67
=> 43.33
irb(main):012:0> a
=> 43.33
irb(main):013:0> a=a.to_f-43.33
=> 1.4210854715202e-14

Lo que se espera es que la operación devuelva cero. Y como ven no pasa
eso, la version de ruby es: ruby 1.8.7 (2010-01-10 patchlevel 249)
[i486-linux]

Gracias.

Julio césar Jurasec wrote:

Hola, soy nuevo por acá, quisiera ver si me pueden orientar por que
sucede algo tan extraño en una operación básica de resta.

irb(main):010:0> a=210
=> 210
irb(main):011:0> a=a.to_f-166.67
=> 43.33
irb(main):012:0> a
=> 43.33
irb(main):013:0> a=a.to_f-43.33
=> 1.4210854715202e-14

Lo que se espera es que la operación devuelva cero. Y como ven no pasa
eso, la version de ruby es: ruby 1.8.7 (2010-01-10 patchlevel 249)
[i486-linux]

Gracias.

Como vez realmente el numero es muy cercano a 0 es un 1.42 con 14 ceros
a la izquierda, pero para representar lo que quieres es mejor que
termines la opereacion o con un redondeo o convirtiendo la variable a
integer.

Saludos,

Cristian Vasquez
Medellín - Colombia

Cristian Vasquez wrote:

Julio césar Jurasec wrote:

Hola, soy nuevo por acá, quisiera ver si me pueden orientar por que
sucede algo tan extraño en una operación básica de resta.

irb(main):010:0> a=210
=> 210
irb(main):011:0> a=a.to_f-166.67
=> 43.33
irb(main):012:0> a
=> 43.33
irb(main):013:0> a=a.to_f-43.33
=> 1.4210854715202e-14

Lo que se espera es que la operación devuelva cero. Y como ven no pasa
eso, la version de ruby es: ruby 1.8.7 (2010-01-10 patchlevel 249)
[i486-linux]

Gracias.

Como vez realmente el numero es muy cercano a 0 es un 1.42 con 14 ceros
a la izquierda, pero para representar lo que quieres es mejor que
termines la opereacion o con un redondeo o convirtiendo la variable a
integer.

Saludos,

Cristian Vasquez
Medellín - Colombia

Si, entiendo el número, solo que no se me hace una solución optima lo
del redondeo ni lo del casteo ya que es dinero lo que estoy
representando, además 43.33 - 43.33 es 0, no un número cercano a cero
;).

Gracias por tu respuesta Cristian.