Mailinglisten-Archive |
Cyrill Schumacher wrote: > hey ho! > > wir hatten das thema schon mal in der liste, aber leider konnte > ich keine antwort finden... :-( > wenn ich rechnen lasse: > > 24.62 DM - 24.61 DM = 0.01 DM ? > > Falsch! Leider ergibt das ergebnis: 0.010000000000002 > > oder 449.00 DM - 448.99 DM = 0.0099999999999999999999 > > Wie kann ich jetzt diese Ergebnisse runden auf 0.01 ??? > mit round() geht es nicht, da man hier nur int werte erhält > und deine d(o)ubels ;-) > hat einer ne Idee für so eine round() Funktion ? ich nehme an, es geht Dir um die Ausgabe der Ergebnisse, hier ist printf (bzw. sprintf()) Dein Freund: printf("%.2f",449.00-448.99); --> 0.01 Die Formatangabe %.2f steht dabei für Floating-Point-Wert mit 2 Stellen hinter dem Komma. Eine entsprechende round() Funktion mit Angabe der Nachkommastellen bringt nichts, da die interne Darstellung der Werte weiter binär bleibt und damit dieselben Rundung'fehler' immer wieder auftauchen, wenn man bis zur letzten Stelle alles ausgiebt. Wer es ganz genau haben möchte benutzt die bcmath-Funktionen, aber für Währungsrechnungen wären das Kanonen auf Spatzen, solange Du nicht mit Milliardenbeträgen jonglierst. PS: einige Datenbanken und z.T. auch Programmiersprachen (?) bieten einen Extra-Datentyp MONEY oder CURRENCY, um genau diese Verwirrungen zu vermeiden -- Hartmut Holzgraefe hartmut_(at)_six.de http://www.six.de Besuchen Sie Six auf der Hannover-Messe (20.-25.3.) in Halle 14, Stand J50!
php::bar PHP Wiki - Listenarchive