7
votes

Racine carrée en php

Pourquoi la sortie de sqrt code> pas un entier pour "16" dans php?

Exemple P>

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 > 


0 commentaires

6 Réponses :


9
votes

Non, ce n'est pas un entier. C'est un flotteur .


0 commentaires

2
votes

Parce que cela renvoie toujours un flotteur: xxx

Vous pouvez le jeter dans un entier si vous voulez: xxx

Edit, ok alors: xxx


1 commentaires

Le problème avec intval 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.



5
votes

dit qu'il est juste dans l'API, le type de retour est flotté.

http: //us2.php. NET / SQRT P>

 float sqrt  ( float $arg  )


0 commentaires

16
votes

Selon le manuel PHP, 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.

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> xxx pré>

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>

$result = sqrt(16);
if (filter_var($result, FILTER_VALIDATE_INT)) {
    // is an integer
}


4 commentaires

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);}



3
votes

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
}


1 commentaires

C'est aussi une bonne méthode. Merci d'avoir souligné la fonction de Knuth!



0
votes

Une autre façon de vérifier que les entiers seraient couplés à une chaîne et vérifiant cela avec CTYPE_DIGIT () xxx

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.


0 commentaires