phpbar.de logo

Mailinglisten-Archive

[php] round() ?

[php] round() ?

Martin Rieth mrieth_(at)_metanormal.de
Fri, 17 Mar 2000 14:34:02 +0100


Moin Moin Gloss,

Es ist moeglich genaue, exakte Werte zu berechnen.
Das magische Stichwort heisst: Binary Coded Decimal  (BCD)
Unter PHP als:
  "  BC Arbitrary Precision Math Functions "  zu finden.
Grund hier wird faktisch mit Dezimalzahlen gerechnet. Also bei jedem
Nibble werden einige Werte vernachlaessigt ...
0-9 wird genutzt
A-F wird vergeudet.
Die hexadezimale Zahl: 0x42 entspricht also 42. :-) HURRA! :-)

Keine Umrechnung folglich keine Fehler ... :-7

Deine Gedanken erreichten mich am Freitag, 17. März 2000 und veranlassten mich zu folgendem:
>> Von:  Stefan Engelhardt[SMTP:Stefan.Engelhardt_(at)_stud.fh-hannover.de]
>> > Kann mir jemand die LOGIK dahinter erklären ???
>> > Rein mathematisch ist 449.00 - 488.99 = 0.009999999999999
>> > schlichtweg FALSCH.
>> > 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 ) anscheinend  zu doof das richtig zu berechnen ??
>> Das hängt mit der internen Darstellung von Gleitkommazahlen zusammen.
>> Angenommen, 
G> Hinzufügen möchte ich noch der ausgezeichneten Erklärung von Stefan,
G> daß dieses Problem bei allen Programmiersprachen auftritt, sobald es
G> sich um Gleitkommazahlen handelt.
G> Die einzigste Abhilfe ist, die Werte als Integer in Pfennigen abzuspeichern.
G> Dann hast du nur ganze Zahlen, und es treten keine Rundungsfehler mehr
G> auf. Bei der Ausgabe kannst du sie ja dann durch 100 teilen, und hast
G> wieder DM und PF.


I say 42, Martin
----- _   _   _   _  . .  _   _  .  .  _  .
     |-' /-\ |-< /-\ |\| (_) |-< |\/| /-\ |_
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     eMail    = mailto:mrieth_(at)_paranormal.de
      Homepage = http://www.paranormal.de/
         Ich bin PARANORMAL - Du auch?




php::bar PHP Wiki   -   Listenarchive