Mailinglisten-Archive |
Arne Blankerts wrote: > On Fri, 17 Mar 2000 12:18:34 +0000, Steffen Sander wrote: > > >> oder 449.00 DM - 448.99 DM = 0.0099999999999999999999 > > >Vorschlag: > >echo number_format( 449.00 - 448.99 + 0.005, 2 )." DM"; > >Ergebnis: 0.01 DM > > Auch wenn ich mir jetzt hiermit den Idiot-des-Tages einhandle.. > > Kann mir jemand die LOGIK dahinter erklären ??? Computer rechnen intern i.A. nicht dezimal, sondern binär ... und mit endlicher Genauigkeit > Rein mathematisch ist 449.00 - 488.99 = 0.009999999999999 schlichtweg FALSCH. genauso wie sich 1/3 nicht als endliche Dezimalzahl darstellen läßt, geht 1/100 nicht mit Binär- bzw. Dualzahlen ... > Das man mit runden das wieder gerade biegen kann is mir klar, nur wieso ist der Computer > (oder php ? weil in pascal geht das ohne rumfummeln ) welches pascal ;-) vermutlich wird dort einfach implizit bei Ausgaben _vor_ der letzten Stelle gerundet > anscheinend zu doof das richtig zu berechnen ?? > > und irgendwas, und sei es noch so klein, hinzuzufügen, ist so ziemlich das DRECKIGSTE was man machen kann... (imho) es kommt darauf an ... aber eine vernünftige 4/5 Rundung bei der Ausgabe, wie sie z.B. bei printf("%.2f",...) passiert, ist schon der elegantere Weg ODER: den Wert von 'precision' in der php.ini etwas tiefer drehen, z.B. auf 10 (Nachkommastellen), oder 2, wenns immer nur um Geld geht ... dann klappts auch mit print und echo -- 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