Quadratwurzel in PHP

7

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?

    
Léo Léopold Hertz 준영 31.10.2009, 14:18
quelle

6 Antworten

15

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%     
Jason 31.10.2009, 14:25
quelle
9

Nein, es ist keine ganze Zahl. Es ist ein Float .

    
Björn 31.10.2009 14:19
quelle
5

Sagt es richtig in der API, Rückgabetyp ist float.

Ссылка

%Vor%

Gibt die Quadratwurzel von arg zurück.

    
randy melder 31.10.2009 14:22
quelle
3

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%     
Vincent Ramdhanie 31.10.2009 14:29
quelle
2

Weil es immer einen Gleitkommawert zurückgibt:

%Vor%

Sie können es in eine Ganzzahl umwandeln, wenn Sie möchten:

%Vor%

BEARBEITEN, Ok dann:

%Vor%     
Alix Axel 31.10.2009 14:20
quelle
0

Eine andere Möglichkeit, nach ganzen Zahlen zu suchen, wäre das Gießen in eine Zeichenkette und das Überprüfen mit ctype_digit()

%Vor%

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.

    
Henrik Opel 31.10.2009 14:34
quelle

Tags und Links