Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Integer/float Bug?
BeitragVerfasst: 17 Dez 2003, 02:53 
Offline
Hacker
Benutzeravatar

Registriert: 07 Dez 2003, 17:30
Beiträge: 499
Wohnort: Dortmund
Hallo,

habe folgende Merkwürdigkeit:

x=281421.41*100
x,y=x.divmod(100)
puts y #>> 41
puts y.to_i #>> 40

Kann sich das jemand erklären? Rundungsfehler? Find ich ziemlich blöd.

Winfried


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 17 Dez 2003, 16:05 
Offline
Ex-Admin
Benutzeravatar

Registriert: 12 Mai 2003, 18:49
Beiträge: 890
Wohnort: Kiel
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


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 18 Dez 2003, 02:11 
Offline
Hacker
Benutzeravatar

Registriert: 07 Dez 2003, 17:30
Beiträge: 499
Wohnort: Dortmund
Habe gestern noch ein wenig ausprobiert und bin dann auch auf round gekommen. Du hast recht, round ist der richtige Ansatz. Trotzdem war es einfach erstmal verwirrend, weil float ja mit genau 41 ausgegeben wurde.

Interessant, dass 1.8 da anders reagiert, habe es mit 1.6.7, 1.6.8 und 1.7.2 probiert. Immer 41/40 als Ergebnis.

Winfried


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron