Rundungsfehler

MySQL, PostgreSQL, SQLite
f-c0d3
Posts: 17
Joined: 2004-03-08 17:15

Rundungsfehler

Post by f-c0d3 » 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...

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: Rundungsfehler

Post by outofbound » 2004-10-11 10:53

Ich tippe mal auf das BigInt...

INT * FLOAT = Wahrscheinlichirgendwasseltsames. ;)

Das es so ne lange Precision hat liegt dann halt daran, dass
irgendwo halt die Genauigkeit nicht mehr hinhaut, und
dann einfach abgeschnitten und gerundet wird.

Das ist soweit ja auch richtig. Typconversionen sollte
man sich auch gut überlegen...

PHP macht das halt von Haus aus, und deswegen
klappts auch mitm Nachbarn.

Testweise: Stell mal Amount auf Float um und
versuchs nochmal. (Auf nem Testsystem natürlich).

Gruss,

Out