Gleitkomma-Werte sind von Natur aus ungenau und sind sehr selten gleich einen anderen aufgrund der Art, wie sie gespeichert werden und Rundungsfehler zu eins. Sie sollten Floats vergleichen, indem Sie sehen, ob die beiden Werte "nahe genug" sind. Das heißt, der Absolutwert der Differenz zwischen den beiden Werten wird mit einer signifikant kleinen Fehlerquote verglichen (oft als "Epsilon" bezeichnet).
Eine solche Implementierung kann:
if (abs($total - 1) < 0.000000001)
die("total is 1");
} else {
die("total is not 1");
}
Beachten Sie, dass nur Anforderungen Ihrer Anwendung kann wirklich eine sichere Fehlerspanne bestimmen, was ist und an welchem Punkt Zahlen sollten für die Anzeige gerundet werden.
Wenn Sie mit Währungswerten, zum Beispiel zu tun hat, und genaue Präzision erfordern, eine bessere Lösung wäre ganz Gleitkommaarithmetik zu verzichten. Eine Option wäre in diesem Fall, einen Integer-Typ zu verwenden und die Zahl als Cents zu speichern, die nur in der letzten Minute geteilt wird, um die Zahl für den Benutzer anzuzeigen (oder nicht einmal zu teilen und stattdessen einen Dezimalpunkt in die Zeichenfolge einzufügen).
http://stackoverflow.com/questions/4682889/is-floating-point-ever-ok – thumbmunkeys