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 !

0voto

j.hull Points 1

Ce qui semble être une approche simple serait d'utiliser le module (%) pour déterminer si une valeur est entière ou non.

x = y % 1  

si y n'est pas un nombre entier, le résultat n'est pas un zéro (0). Un test serait donc le suivant :

if (y % 1 == 0) { 
   // this is a whole number  
} else { 
   // this is not a whole number 
}

var isWhole = (y % 1 == 0? true: false);  // to get a boolean return. 

En admettant que cela considère un nombre négatif comme un nombre entier, il suffit alors d'entourer ABS() y de toujours tester sur le positif.

0voto

Maurice Points 1041

J'utilise toujours le typage pour vérifier si les variables contiennent un nombre entier, pratique quand on ne connaît pas l'origine ou le type de la valeur.

if ((string) $var === (string) (int) $var) {
    echo 'whole number';
} else {
    echo 'whatever it is, it\'s something else';
}

Dans votre cas particulier, j'utiliserais is_int()

if (is_int($var) {
    echo 'integer';
}

0voto

user96534678 Points 446

Une solution simple pour les nombres entiers positifs uniquement. Cela peut ne pas fonctionner pour tout.

$string = '0x539';
$ceil = ceil($string);

if($ceil < 1){
  $ceil = FALSE; // or whatever you want i.e 0 or 1
}

echo $ceil; // 1337

Vous pouvez utiliser floor() au lieu de ceil() si vous le souhaitez.

0voto

jurchiks Points 1206
function isInteger($value)
{
    // '1' + 0 == int, '1.2' + 0 == float, '1e2' == float
    return is_numeric($value) && is_int($value + 0);
}

function isWholeNumber($value)
{
    return is_numeric($value)
        && (is_int($value + 0)
            || (intval($value + 0) === intval(ceil($value + 0))));
}

Si vous voulez vérifier à la fois les nombres entiers et décimaux, vous pouvez procéder comme suit :

if (isInteger($foo))
{
    // integer as int or string
}
if (isWholeNumber($foo))
{
    // integer as int or string, or float/double with zero decimal part
}
else if (is_numeric($foo))
{
    // decimal number - still numeric, but not int
}

Cela vérifiera correctement votre nombre sans l'arrondir, le convertir en int (ce qui, dans le cas d'un nombre décimal, fera perdre la partie décimale) ou faire des calculs. Si, toutefois, vous souhaitez traiter 1.00 comme un nombre entier, alors c'est une toute autre histoire.

0voto

spice Points 867

Je sais que c'est un vieux post mais c'est une fonction simple qui retourne un nombre entier valide et le transforme en int. Elle renvoie false si elle échoue.

function isWholeNumber($v)
{
    if ($v !='' && is_numeric($v) && strpos($v, '.') === false) {
        return (int)$v;
    }
    return false;
}

Utilisation :

$a = 43;
$b = 4.3;
$c = 'four_three';

isWholeNumber($a) // 43
isWholeNumber($b) // false
isWholeNumber($c) // false

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