Forum: Rails-ES Comportamiento extraño de ruby

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B0dcc35a00c925c44a37dcde305439eb?d=identicon&s=25 Julio césar J. (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.
7508129b5d8642ecd8e99c4cd9acae5d?d=identicon&s=25 Cristian V. (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
B0dcc35a00c925c44a37dcde305439eb?d=identicon&s=25 Julio césar J. (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.