PHP Float-Werte aus DB werden viele Nachkommastellen dran gehangen

kleinesµ

Ensign
Registriert
Feb. 2004
Beiträge
159
Hallo in die Runde :)

habe folgendes Problem:
Ich mache per Zend-Framework eine Datenbankabfrage:
'SELECT kurs FROM daten;'

Tabelle 'kurs' ist vom Typ float, dort stehen Werte drin wie 45.34 und 0,003 und 40

Ganzzahlige Werte werden richtig zurückgegeben, aber alle Werte mit einer Nachkommastelle haben auf einmal ganz viele zusätzliche Nachkommastellen:
45.34 wird dann zu 45.340001831055
0.003 wird zu 0.00299997615814

Ich weiß, dass wenn man den Wert aufrunden würde, man zum richtigen Ergebnis kommt, runden möchte ich aber nicht.

Ach ja, wenn ich die gleiche DB-Abfrage per Heidisql mache, stehen die korrekten Werte im Antwortarray.

Warum werden also bei meinem System Windows / Apache / PHP / Mysql / Zend falsche (zu lange) float-Werte ausgegeben?

Vielen Dank im voraus!

*edit*
Dieselbe Abfrage nur ohne Zend zu benutzen, gibt mir die korrekten Daten aus, liegt also am Zend-Framework :(
 
Zuletzt bearbeitet:
Kann sein, dass die zwei Systeme mit unterschiedlichen Datentypen rechnen (zB unterschiedliche Mantisse). Sicherheitshalber vielleicht mal alles auf die neueste Version updaten. Scheint ja bei Zend gerade bezügliche Floating-Points kürzlich einen Bug gegeben zu haben.
 
Hallo,

welche Klasse vom Zend Framework benutzt du für die Abfrage und welche Funktionen von PHP hast du für die "erfolgreiche" Gegenprobe benutzt?
Welche Version vom Zend Framework ist im Einsatz?

Gruß
 
Das Problem ist ganz einfach erklärt:
Fließkommazahlen lassen sich in PCs nicht genau darstellen, in PHP scheint es bei dir eine Fließkommazahl umgewandelt zu werden (float oder double), HeidiSQL gibt es aber einfach als String aus und hat somit keine Rundungsfehler.

Ergo: du musst runden oder die Daten aus der DB nur als Strings behandeln
 
Vielen Dank für die Antworten!
Letztendlich habe ich alle Werte so gerundet, wie ich sie haben wollte.

@ ice-breaker: das wird es sein :)

Fall noch von Interesse: Versionen, die ich benutze:
Zend Version 1.10.6
PHP Version 5.3.1
 
kann man in der datenbank nich sagen iwi: (5,2) also 10 Stellen, davon 2 nachkommastellen?

WÄre dann sowas:

342,22
 
Du solltest auch überlegen, ob du nicht evtl. DECIMAL als Datentyp nutzen kannst.
 
Zurück
Oben