Rundungsfehler
Posted: 2004-10-10 21:29
Hallo,
folgendes Problem:
Ich will die Summe eines Warenkorbes ausrechnen:
In dem Warenkorb befinden sich 2 Produkte mit diesen Preisen (absichtlich so gewählt)
1. Produkt: 10.01
2. Produkt: 10.99
Hier verwende ich 2 Methoden.
1. Method:
SQL-Query:
SELECT SUM(amount*price) AS sum FROM product WHERE id='45190';
Liefert: 20.989999771118 ?????
Spalte amount ist BigInt / price ist Float
2. Method:
PHP-Berechnung:
In einer Schleife Multiplizieren und Summieren:
Liefert: 20.00
Ich hab schon versucht händisch zu Runden indem ich bei dem SQL-Query mit 10000 mulitpliziere / 500 addiere und wieder durch 10000 dividiere aber das kannst doch nicht sein oder? Vorallem funktioniert das nur bei dem Beispiel. Wenn ich das mit 10.01 und 10.99 mache, also 20.01 rauskommen soll dann funktioniert auch die Rundung nicht mehr.
Kann mir jemand sagen wie ich dieses Problem behebe? Ich versteh überhaupt nicht warum MySQL mit überhaupt so ne lange Floating-Point zurück gibt... die Spalte amount ist bei beiden Produkte 1.. also wird der price jedesmal nur mit 1 multipliziert..
Dank im vorraus...
folgendes Problem:
Ich will die Summe eines Warenkorbes ausrechnen:
In dem Warenkorb befinden sich 2 Produkte mit diesen Preisen (absichtlich so gewählt)
1. Produkt: 10.01
2. Produkt: 10.99
Hier verwende ich 2 Methoden.
1. Method:
SQL-Query:
SELECT SUM(amount*price) AS sum FROM product WHERE id='45190';
Liefert: 20.989999771118 ?????
Spalte amount ist BigInt / price ist Float
2. Method:
PHP-Berechnung:
In einer Schleife Multiplizieren und Summieren:
Liefert: 20.00
Ich hab schon versucht händisch zu Runden indem ich bei dem SQL-Query mit 10000 mulitpliziere / 500 addiere und wieder durch 10000 dividiere aber das kannst doch nicht sein oder? Vorallem funktioniert das nur bei dem Beispiel. Wenn ich das mit 10.01 und 10.99 mache, also 20.01 rauskommen soll dann funktioniert auch die Rundung nicht mehr.
Kann mir jemand sagen wie ich dieses Problem behebe? Ich versteh überhaupt nicht warum MySQL mit überhaupt so ne lange Floating-Point zurück gibt... die Spalte amount ist bei beiden Produkte 1.. also wird der price jedesmal nur mit 1 multipliziert..
Dank im vorraus...