In PHP verwenden wir häufig die IS_NAN -Funktion, um zu überprüfen, ob ein Wert NAN (nicht eine Zahl) ist, und wir verwenden häufig die runde Funktion, um schwimmende Zahlen zu runden. Wenn diese beiden Funktionen jedoch in Kombination verwendet werden, können sie jedoch manchmal zu einem Genauigkeitsfehler oder einem unerwarteten Verhalten führen. In diesem Artikel werden die Ursachen dieser Fehler untersucht und einige Lösungen bereitgestellt, um diese Probleme effektiv zu vermeiden.
Die runde Funktion wird verwendet, um schwimmende Zahlen zu runden. Es akzeptiert zwei Hauptparameter:
round($number, $precision = 0);
Wobei $ nummer die schwimmende Nummer ist, die verarbeitet werden soll, und $ Precision ist die abgerundete Präzisions -Ziffern -Nummer. Wenn der Präzisionsparameter weggelassen wird, beträgt der Standardwert 0.
Die IS_NAN -Funktion wird verwendet, um zu überprüfen, ob die angegebene Variable NAN ist. Nan ist eine spezielle schwimmende Nummer, die "keine Zahl" bedeutet. Zum Beispiel ist das Ergebnis von 0/0 Nan .
is_nan($value);
Wenn Sie die IS_NAN- und Rundfunktion in Kombination verwenden, hängt der Grund für den Fehler normalerweise damit zusammen, wie die schwimmende Nummer dargestellt wird. Schwimmende Zahlen in PHP basieren auf der binären Darstellung des IEEE 754 -Standards, der bestimmte numerische Werte manchmal nicht genau darstellen kann. Beispielsweise kann Runde (0,1 + 0,2, 1) 0,3 anstelle des erwarteten Ergebnisses zurückgeben.
Dieser Fehler spiegelt sich normalerweise in den folgenden Situationen wider:
Aufgrund der binären Darstellung von schwimmenden Zahlen können einige Zahlen nicht genau dargestellt werden.
Bei der Runden verarbeitet die Rundenfunktion die Genauigkeit, ist jedoch immer noch durch die Genauigkeit der schwimmenden Zahl begrenzt.
Bei der Verwendung der IS_NAN -Funktion können Sie auf einige Grenzsituationen stoßen, die sich auf die Darstellung von schwimmenden Zahlen beziehen, was zu Fehleinschätzungen als NAN führt.
Um den Fehler zwischen der runden Funktion und der IS_NAN -Funktion zu verringern, müssen Sie zunächst sicherstellen, dass Sie beim Aufrufen der runden Funktion eine geeignete Genauigkeit übergeben. Vermeiden Sie beispielsweise unnötige hochpräzisionsübergreifende Operationen und verringern Sie Fehler in schwebenden Zahlen.
$value = 0.1 + 0.2;
$rounded_value = round($value, 2); // Rund um das Ergebnis auf zwei Dezimalstellen
if (is_nan($rounded_value)) {
echo "The value is NaN.";
} else {
echo "The rounded value is: " . $rounded_value;
}
Manchmal kann Casting einige Fehler aufgrund ungenauer schwimmender Zahlen vermeiden. Die Umwandlung von schwimmenden Zahlen in Saiten und dann abzurunden oder die Ergebnisse in Ganzzahlen umzuwandeln, vermeidet normalerweise einige geringfügige Fehler.
$value = 0.1 + 0.2;
$rounded_value = round((int)($value * 100)); // Umrundung in Ganzzahlen umwandeln
if (is_nan($rounded_value)) {
echo "The value is NaN.";
} else {
echo "The rounded value is: " . $rounded_value;
}
Wenn Sie Fehleinschätzungen als NAN vermeiden möchten, können Sie eine benutzerdefinierte Vergleichsfunktion erstellen. Diese Funktion kann bestimmen, ob es sich um NAN handelt, indem es verglichen wird, ob die schwimmende Zahl nahe an einem vorgegebenen Wert liegt.
function is_approx_nan($value, $epsilon = 0.00001) {
return abs($value - NAN) < $epsilon;
}
$value = 0.1 + 0.2;
$rounded_value = round($value, 2);
if (is_approx_nan($rounded_value)) {
echo "The value is approximately NaN.";
} else {
echo "The rounded value is: " . $rounded_value;
}
Wenn wir die IS_NAN- und Rundfunktionen in PHP verwenden, können wir auf das Problem des Floating Number -Genauigkeitsfehlers stoßen. Durch das Verständnis der Grundursachen für diese Probleme und die Einnahme entsprechender Lösungen können wir die Auswirkungen von Fehlern effektiv vermeiden.
Passen Sie die Genauigkeit der Rundenfunktion an, um den Genauigkeitsverlust zu verringern.
Konvertierung von Gusstyp, um eine ungenaue Darstellung von schwimmenden Zahlen zu vermeiden.
Verwenden Sie eine benutzerdefinierte Vergleichsmethode, um zu überprüfen, ob es sich um NAN handelt.
Durch diese Methoden können wir es vermeiden, Nan so weit wie möglich falsch zu beeinträchtigen, wenn wir mit schwimmenden Zahlen zu tun haben und die Stabilität und Genauigkeit des Programms sicherstellen.