Thread Richtig INTen (14 answers)
Opened by bianca at 2009-12-24 09:27

topeg
 2012-01-20 19:14
#155566 #155566
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Die Probleme tauchen immer auf, wenn Fließkommazahlen in Integer umgewandelt werden sollen. int ist hier nur ein Beispiel. Beim Runden passiert genau das selbe.
Das tritt in deinem Fall nur deshalb nicht auf, da mit Zahlen gearbeitet wird, die nahe an einem Integer sind.
Nimmt man andere Werte, so taucht das Problem auch wieder auf. Deine Form des Rundens ebenfalls ist nicht zuverlässig. Auch dort kann es zu Fehlern kommen, wenn eine Rationale Zahl als Fließkommazahl nicht darstellbar ist. So was kann man umgehen. So ist es möglich einigermaßen Korrekt zu runden, indem man die Genauigkeit der Darstellung erhört. Das habe ich z.B bei meiner Funktion zum Runden gemacht. Ähnliches kann man auch bei der von bianca angesprochenen Multiplikation mit Integerumwandlung machen.

Gäbe es einfache Lösungen die Schwächen des Computers zu umgehen, so würde ich sie nutzen. Aber einfache Lösungen gibt es nur in Spezialfällen. Generell muss man größeren Aufwand treiben.

EDIT:
Wobei int($wert*100) ein solcher Spezialfall ist. Da kann man schreiben int($wert*100+0.001) damit werden zu kleine Werte "angehoben". Insofern hast du Recht. Das lässt sich aber nicht so einfach generalisierten.
Last edited: 2012-01-20 19:25:23 +0100 (CET)

View full thread Richtig INTen