phpbar.de logo

Mailinglisten-Archive

[php] round() ?

[php] round() ?

Hartmut Holzgraefe hartmut_(at)_six.de
Fri, 17 Mar 2000 12:53:42 +0100


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