Forum: Rails-ES Comportamiento extraño de ruby

Posted by Julio césar Jurasec (jurasec)
on 2010-04-10 04:37
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.
Posted by Cristian Vasquez (heavyblade)
on 2010-04-11 18:52
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
Posted by Julio césar Jurasec (jurasec)
on 2010-04-12 07:32
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.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.