Ich versuche, 2 Werte in PHP zu vergleichen.PHP - Seltsames Ergebnis beim Vergleich von 2 Float-Werten
Meine Logik ist:
- Ich habe eine Restmenge (a)
- Ich habe eine Menge aufgeladen werden (b)
- I durch (a - b) berechnet werden verbleibenden
- Nach Ladevorgang erhalte ich den tatsächlichen Restwert (c)
- ich den Wert I in # bekam vergleichen 3 mit (c)
Obwohl beide ähnlich sind, sagt PHP, dass sie nicht gleich sind.
unten ist mein Code (gefüllt mit Werten)
<?php
$remaining_amount_before_payment = "600";
$remaining_amount_after_payment = (float)$remaining_amount_before_payment - (float)"387.60";
$actual_remaining_amount_after_payment = "212.4";
echo "actual_remaining_amount_after_payment: {$actual_remaining_amount_after_payment} <br><br>";
echo "remaining_amount_after_payment: {$remaining_amount_after_payment} <br><br>";
var_dump(((float)$actual_remaining_amount_after_payment) == ((float)$remaining_amount_after_payment));?>
Typ I, die Werte zu float
werfen, aber die var_dump
kehrt FALSE
.
Kann mir jemand helfen, herauszufinden, warum das so ist?
Ich benutze PHP 5.6.
Vielen Dank im Voraus!
a) Warum schreiben Sie Ihre Zahlen als Strings an erster Stelle? Es gibt absolut keinen Grund, das jemals zu tun. b) wissen Sie, dass Gleitpunktarithmetik * nicht * genau ist? weißt du und hast den [Gleitkomma-Guide] (http://floating-point-gui.de/) gelesen? c) und wie du selbst gesagt hast: "Obwohl beide ähnlich sind, sagt PHP, dass sie nicht gleich sind." - Sie wissen, dass "ähnlich" und "gleich" nicht gleich sind? ;) –
Weil die tatsächlichen Werte, die ich bekomme, von einer API kommen und sie als Zeichenfolgen kommen! Deshalb habe ich sie auf "float" geworfen, da ich keine Kontrolle über die API-Antwort habe! Ich wusste nicht über den Punkt (b) Sie sagten. Ist es nicht gut, 'float' zu verwenden, um Cast zu schreiben? – masterFly