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