Mailinglisten-Archive |
>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