Warum ist die Ausgabe von sqrt
keine Ganzzahl für "16" in PHP?
Beispiel
%Vor%Ich glaube, dass das Problem in der internen Darstellung liegt, die PHP ähnlich wie Python versteckt. Wie können Sie dann wissen, wann die angegebene Zahl nach dem Ziehen einer Quadratwurzel ganzzahlig ist?
Wie können Sie also in PHP zwischen 4
und 4.12323
unterscheiden, ohne eine Regex zu verwenden?
Gemäß dem PHP-Handbuch gibt float sqrt ( float $arg )
, sqrt () immer einen Gleitkommawert zurück. Das Verwenden der is_int () - Funktion wird das Problem nicht lösen, da es den Datentyp überprüft und einen Fehler zurückgibt.
Um dies zu umgehen, können Sie es testen, indem Sie stattdessen modulus verwenden: (muss fmod () für den Gleitkomma-Modul sein und nicht den% -Operator für den ganzzahligen Modul)
%Vor%Wenn Sie PHP 5.2.0 oder später verwenden, glaube ich, dass das auch funktionieren würde, aber ich habe es nicht in dieser Art von Umständen verwendet, um sicher zu sein:
%Vor%Sagt es richtig in der API, Rückgabetyp ist float.
%Vor%Gibt die Quadratwurzel von arg zurück.
Sie können die Funktion floor verwenden, um den ganzzahligen Teil des Werts zu erhalten und den ursprünglichen Wert zu subtrahieren. Wenn die Differenz = 0 ist, dann ist es NICHT eine Ganzzahl. z.B.
%Vor% Eine andere Möglichkeit, nach ganzen Zahlen zu suchen, wäre das Gießen in eine Zeichenkette und das Überprüfen mit ctype_digit()
Natürlich ist das ein etwas seltsamer Weg, verglichen mit der Verwendung von Modulo, wenn Sie ohnehin Berechnungen durchführen. Aber es ist praktisch beim Testen von Werten, die von einem Formular gepostet werden, da es sich zunächst um Zeichenfolgen handelt. Ein Nachteil ist, dass es false für eine negative ganze Zahl zurückgeben würde.