|
Moin Winfried!
Float#to_i rundet nicht, sondern schneidet die Nachkommastelle ab. Einen Floatwert wandelst du mit Float#round in einen int um.
Floatwerte werden in Computern immer nur als Näherungswert gespeichert. Das kann ziemlich nervig sein, wird aber gemeinhin nicht als Bug angesehen. puts y sollte eigentlich auch nicht 41 ausgeben, tut es bei mir auch nicht (Ruby 1.8.0):
irb(main):001:0> x=281421.41*100
=> 28142141
irb(main):002:0> x.class
=> Float
irb(main):003:0> x,y = x.divmod(100)
=> [281421.0, 40.9999999962747]
irb(main):004:0> puts y 40.9999999962747
=> nil
irb(main):005:0> puts y.to_i
40
=> nil
irb(main):006:0> puts y.round
41
=> nil
iGEL
|