Pourquoi la sortie de Exemple P> sqrt code> pas un entier pour "16" dans php?
php > $fig = 16;
php > $sq = sqrt($fig); //should be 4
php > echo $sq;
4
php > echo is_int($sq); // should give 1, but gives false
php >
6 Réponses :
Parce que cela renvoie toujours un flotteur: Vous pouvez le jeter dans un entier si vous voulez: p> Edit, ok alors: strong> p>
Le problème avec intval code> est-ce qu'il arrondit. J'ai besoin de savoir exactement qui est un entier qui n'est pas après avoir pris une racine carrée.
dit qu'il est juste dans l'API, le type de retour est flotté.
http: //us2.php. NET / SQRT P>
float sqrt ( float $arg )
Selon le manuel PHP, Pour vous déplacer, vous pouvez le tester à l'aide de modulus à la place: (doit être FMOD () pour le module de point flottant et pas l'opérateur% pour le module entier) p> Si vous utilisez php 5.2.0 ou plus tard, je pense que cela fonctionnerait également, mais je ne l'ai pas utilisé dans ce Type de circonstance à être certain: P> float sqrt (float $ arg) code>, sqrt () renvoie toujours un flotteur. L'utilisation de la fonction is_int () ne résoudra pas le problème car elle vérifie le type de données et renvoie une défaillance.
$result = sqrt(16);
if (filter_var($result, FILTER_VALIDATE_INT)) {
// is an integer
}
Votre première commande ne fonctionne pas pour moi, mais le dernier fonctionne.
Vous avez raison. Le premier fonctionne maintenant aussi. Je le vérifie avant de poster la modification.
En tant que note latérale, le test d'un entier en utilisant (float% 1) fonctionne dans JavaScript et MySQL, tout simplement pas dans PHP nécessitant FMOD () au lieu de%.
Je ne savais pas que le filtre_validate_int existait et avait écrit ma propre fonction. check_is_integer ($ n) {$ i = (int) $ n; retour ($ n == $ i);}
Vous pouvez utiliser la fonction de plancher pour obtenir la partie entière de la valeur et soustraire la valeur d'origine. Si la différence est! = 0, ce n'est pas un entier. E.G.
if (($sq - floor($sq)) == 0){ YES }else{ NO }
C'est aussi une bonne méthode. Merci d'avoir souligné la fonction de Knuth!
Une autre façon de vérifier que les entiers seraient couplés à une chaîne et vérifiant cela avec Bien sûr, il s'agit d'une manière quelque peu étrange comparée à l'utilisation de modulo lorsque vous effectuez des calculs de toute façon. Mais il est pratique lorsque des valeurs de test affichées d'une forme, car elles seraient des chaînes pour commencer. une mise en garde est que cela reviendrait faux pour un entier négatif. em> p> p> CTYPE_DIGIT () code>