is_int()

Ta0uf19
Invité n'ayant pas de compte PHPfrance

23 juin 2013, 14:54

Bonjour, :)
Lors du calcul de $s, celle-ci prend des valeurs entier que je veux extraire par la fonctions is_int(), mais ça retourne faux.
<?php
        for($n=1; $n<=1000; $n++) {
                $s = $s + 1/(sqrt($n)+sqrt($n+1));
                if (is_int($s)) {
                        print $s."\n";
               	}
        }
?>
Merci de votre aide.
Cordialement,

Mammouth du PHP | 571 Messages

23 juin 2013, 15:30

bonjour,
$s n'est pas un entier c'est un float car is_int() retourne vrai si la valeur est de type int et faux si non entier(ce qui est ton cas). si tu tu tiens à afficher que des entiers tu peux caster $s en int en faisant (int)$s ou intval($s) .
$s=0 ;//initialisation de $s 
for($n=1; $n<=1000; $n++) {
                $s = $s + 1/(sqrt($n)+sqrt($n+1));
                if (is_numeric($s)) {
                        print (int) $s."\n";
                }
        }

Mammouth du PHP | 2278 Messages

23 juin 2013, 21:19

Voici l'explication:
<?php
[b]//l'erreur initiale est que $s n'est pas initialisé; d'où plantage au premier tour[/b]
$s=0;       //ajout
        for ($n=1; $n <= 1000; $n++) 
        {
                $s = $s + 1/(sqrt($n)+sqrt($n+1));
                 // calcul de la partie entiére 
                $part_ent = (int)$s;
                //calcul de la partie décimale
                $part_dec = $s - $part_ent;
                print "<br>S: $s partie entière $part_ent partie décimale $part_dec";
                //ici je teste ce qui se passe et je constate qu'il y a des résultats entiers (visuellement) mais, 
               // vu l'opération d'où ils sortent, ils sont vus comme des float
                if (is_int($s)) 
                {
                        print" $s entier vu par is_int<br>";
                }
                else
                {
                           print" $s float vu par is_int<br>";             
                }
        }
?>
Il te reste à mettre en place un test sur la partie décimale...
Il y a bien aussi variant_int(), mais disponible seulement sous Windows
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD