Page 1 sur 1

Savoir lorsqu'un float est entier

Posté : 18 avr. 2017, 11:53
par fitnopk
Bonjour,
J'ai un for qui incrémente de 0.01
for ($i = 0.0; $i <= 200; $i += 0.01)
et je cherche à faire des echos à chaque fois que mon compteur i atteint une valeur entière. J'utilise is_int()
if (is_int($i))
		{
			if ($iq1 == -1)
				echo number_format($i, 0) . " " . number_format($res, 2) . "\n";
			$res = 0;
		}
Mais ça ne marche pas, is_int() semble plus vérifier si la variable est de type int plutot que si la valeur est entière malgrés ce que dis la description de la doc PHP. Quelqu'un aurait-il une solution svp

Re: Savoir lorsqu'un float est entier

Posté : 18 avr. 2017, 14:01
par yann18
tu peux soustraire le nombre décimal avec sa partie entière.Puis comparer le résultat obtenu avec 0 ( >0 donc nombre décimal sinon nombre entier). Par exemple: ( 10.50 - 10 ) = 0.50. Or 0.50>0 donc 10.50 n'est pas entier.
 function isInteger($input){
        return ( $input - (int) $input ) > 0 ? false:true;
 }

var_dump( isInteger( 10.50) ); //false
var_dump( isInteger( 10.00) ); //true


Re: Savoir lorsqu'un float est entier

Posté : 18 avr. 2017, 14:17
par fitnopk
ça ne marche pas très bien, quand le compteur arrive à 1 par exemple j'obtiens
0.99 false
6.6613381477509E-16 false
0.010000000000001 false
0.020000000000001 false
0.030000000000001 false
0.040000000000001 false
0.050000000000001 false
0.060000000000001 false
0.070000000000001 false
0.080000000000001 false
0.090000000000001 false
0.1 false

Re: Savoir lorsqu'un float est entier

Posté : 18 avr. 2017, 17:14
par yann18
avec un filtre de validation
for ($i = 0.0; $i <= 200; $i += 0.01){
if( filter_var($i, FILTER_VALIDATE_INT)  ) 
  echo $i ."<br>";
else
  echo "$i n'est pas entier<br>";
}


Re: Savoir lorsqu'un float est entier

Posté : 18 avr. 2017, 17:43
par fitnopk
Ca ne marche pas non plus j'ai plein de valeur qui sautent, au final j'ai mis un compteur qui va jusqu'à 100 avant de se faire réinitialisé ça ça marche bien, j'aurai préféré faire moins sale mais bon

Re: Savoir lorsqu'un float est entier

Posté : 19 avr. 2017, 09:08
par fitnopk
ah tient en me levant j'ai réalisé que je pouvais faire un truc tout bête:
if ((int)($i * 100) % 100 == 0)
La nuit porte conseil comme on dit.

Re: [RESOLU] Savoir lorsqu'un float est entier

Posté : 19 avr. 2017, 09:43
par moogli
salut,

juste t'indiquer la raison du problème.
c'est à cause du fait que la représentation d'un entier est approximative (quelque soit le langage).
par exemple voici le passage de 198 à 199
198.99999999996
199.00999999996
pourtant tu as ajouté que 0.01

explication de la doc: http://php.net/manual/fr/language.types.float.php

souvent la solution est de travailler avec des entiers et de diviser par la bonne puissance de 10 ;)

@+