phpbar.de logo

Mailinglisten-Archive

Floatfeld und sum

Floatfeld und sum

Wolfgang Hauck wbh at euta.net
Mon Jan 13 15:45:43 CET 2003


>Hallo,

>ich habe in einer Tabelle ein Floatfeld. Wenn ich dieses mit der Funktion
>sum addieren lasse bekomme ich 10 Kommastellen obwohl meine Tabelle nur
>folgende Werte enthält:

>1,1
>1
>1
>1
>Ergebnis:
>4,1000000238419

>Hat jemand eine Ahnung wo diese Kommastellen herkommen??
>Kann ich mich auf die Rechenergebnisse von mysql nicht verlassen?

Hi Micha,

Das liegt an der Umrechnung der Zahlen von dezimal in Binärzahlen. Wenn du 
z.B. eine Fliesskommazahl in ein float(1,3) speicherst wird diese Zahl wird 
diese gerundet in der Datenbank abgelegt. 1,1 ist binär eine Zahl mit 
unendlich vielen Stellen. Dieses wird bei sum nicht berücksichtigt und die 
Zahl wird für die max. Genauigkeit berechnet (und das ist in deinem Fall 
bei 1,1 = 1,1000000238419. Ein round(Zahl,Dezimalstellen) bringt hier 
Abhilfe.
Es kommt aber noch schlimmer. Wenn du via ODBC arbeitest können trotz 
gleicher Definition der Nachkommastellen unterschiedliche Binärzahlen 
generiert werden (middleware <-> DB). Die Ungenauigkeiten beginnen ab der 
8. Dezimalstelle. Für Kalkulationen und Preisberechnungen (bzw. 
Kursumrechnungen) reicht dieses aber völlig aus. Bei Konvertierungen von 
Datenbanken treten diese Probleme im übrigen auch auf z.B. Access <-> MySQL 
(aber nicht nur bei MySQL). Und da gibts ja auch noch die verschiedenen 
Rundungsmöglichkeiten (mathematisch, kaufmännisch usw...)

MfG Wolfgang

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive