43 votes

PHP vérifie si la variable est un nombre entier

J'ai ce code PHP :

$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;

Ce que je veux savoir, c'est comment vérifier si $entityElementCount est un nombre entier (2, 6, ...) ou partiel (2,33, 6,2, ...).

Merci !

61voto

Tyler Carter Points 30030
if (floor($number) == $number)

45voto

joseph4tw Points 2371

Je sais que c'est vieux, mais j'ai pensé que je devais partager quelque chose que je viens de trouver :

Utilisez fmod et vérifier si 0

$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;
if (fmod($entityElementCount,1) !== 0.0) {
    echo 'Not a whole number!';
} else {
    echo 'A whole number!';
}

fmod est différent de % car si vous avez une fraction, % ne semble pas fonctionner pour moi (il renvoie 0...par exemple, echo 9.4 % 1; produira 0 ). Avec fmod, vous obtiendrez la partie fractionnée. Par exemple :

echo fmod(9.4, 1);

La sortie sera 0.4

18voto

ghostdog74 Points 86060
$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;
if (ctype_digit($entityElementCount) ){
    // (ctype_digit((string)$entityElementCount))  // as advised.
    print "whole number\n";
}else{
    print "not whole number\n";
}

16voto

MartyIX Points 4839

J'utiliserais intval comme ceci :

if($number === intval($number)) {

}

Tests :

var_dump(10 === intval(10));     // prints "bool(true)"
var_dump("10" === intval("10")); // prints "bool(false)"
var_dump(10.5 === intval(10.5)); // prints "bool(false)"
var_dump("0x539" === intval("0x539")); // prints "bool(false)"

Autres solutions

1)

if(floor($number) == $number) {   // Currently most upvoted solution: 

Tests :

$number = true;
var_dump(floor($number) == $number); // prints "bool(true)" which is incorrect.

2)

if (is_numeric($number) && floor($number) == $number) {

Une affaire de coin :

$number = "0x539";
var_dump(is_numeric($number) && floor($number) == $number); // prints "bool(true)" which depend on context may or may not be what you want

3)

if (ctype_digit($number)) {

Tests :

var_dump(ctype_digit("0x539")); // prints "bool(false)"
var_dump(ctype_digit(10)); // prints "bool(false)"
var_dump(ctype_digit(0x53)); // prints "bool(false)"

13voto

Aistina Points 6720

La méthode de base, comme l'a dit Chacha, est la suivante .

if (floor($number) == $number)

Cependant, les types à virgule flottante ne peuvent pas stocker les nombres avec précision, ce qui signifie que 1 pourrait être stocké comme 0,999999997. Cela signifie bien sûr que la vérification ci-dessus échouera, car le chiffre sera arrondi à 0, même si, dans votre cas, il est de 0,999999997. assez proche à 1 pour être considéré comme un nombre entier. Essayez donc quelque chose comme ceci :

if (abs($number - round($number)) < 0.0001)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X