Forum: Rails-ES Comportamiento extraño de ruby

00394fbd26ed3ac73a3253d3fe8dcd99?d=identicon&s=25 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.
86973ba4ee3237a719862c1c26379095?d=identicon&s=25 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
00394fbd26ed3ac73a3253d3fe8dcd99?d=identicon&s=25 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.
This topic is locked and can not be replied to.