PHP проверяет, является ли переменная целым числом - PullRequest
28 голосов
/ 03 февраля 2010

У меня есть этот код PHP:

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

Я хочу знать, как проверить, является ли $ entityElementCount целым числом (2, 6, ...) или частичным (2.33, 6.2, ...).

Спасибо!

Ответы [ 18 ]

1 голос
/ 03 февраля 2010
floor($entityElementCount) == $entityElementCount

Это будет верно, если это целое число

0 голосов
/ 22 февраля 2019
$entityElementCount = (-($highScore-$totalKeywordCount))/0.29;

Method 1-
    By using ctype_digit() function. 

    if ( ctype_digit($entityElementCount )) { 
        echo "Whole Number\n"; 
    } else { 
        echo "Not a whole Number\n"; 
    } 


Method 2-
    By using is_float() function. 

    if (is_float($entityElementCount )) { 
        echo "Not a Whole Number\n"; 
    } else { 
        echo "Whole Number\n"; 
    } 


Method 3-
    By using is_int() function. 

    if (is_int($entityElementCount )) { 
        echo "Whole Number\n"; 
    } else { 
        echo "Not a whole Number\n"; 
    } 


Method 5-
    By using fmod() function. 

    It needs 2 parameters one dividend and other is divisor
    Here $dividend=$entityElementCount and divisor=1
    if (fmod($dividend,$divisor) !== 0.0) {
        echo 'Not a whole number!';
    } else {
     echo 'A whole number!';
    }

there are some more function like intval(), floor(),... can be used to check it`enter code here`
0 голосов
/ 22 февраля 2019

Просто чтобы поделиться своим решением с локализованной строкой / номером, этот комбо работал для меня как шарм.

public static function isWholeNumber ($input, $decimalDelimiter = ',')
{
    if (is_string($input)){
        $input = str_replace($decimalDelimiter, '.', $input);
        $input = floatval($input);
    }

    if (fmod($input,1) !== 0.0) {
        return false;
    }

    return true;
}
0 голосов
/ 21 января 2019

Я знаю, что это очень старая запись, но это простая функция, которая возвращает действительное целое число и приводит его к типу int.В случае сбоя возвращает false.

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

Использование:

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

isWholeNumber($a) // 43
isWholeNumber($b) // false
isWholeNumber($c) // false
0 голосов
/ 08 декабря 2016
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))));
}

Если вы хотите проверить как целые, так и десятичные числа, вы можете сделать следующее:

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
}

Это правильно проверит ваш номер без округления, приведения его к типу int (который в случае десятичного числа потеряет десятичную часть) или выполнения каких-либо математических операций. Однако, если вы хотите трактовать 1.00 как целое число, тогда это совсем другая история.

0 голосов
/ 01 мая 2016

Простое решение только для положительных целых чисел.Это может не работать для всего.

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

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

echo $ceil; // 1337

Вы можете использовать floor () вместо ceil (), если это необходимо

0 голосов
/ 02 июня 2014

Я всегда использую приведение типов, чтобы проверить, содержат ли переменные целое число, что удобно, когда вы не знаете происхождение или тип значения.

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

В вашем конкретном случае я бы использовал is_int ()

if (is_int($var) {
    echo 'integer';
}
0 голосов
/ 18 июня 2013

То, что кажется простым подходом, - это использовать модуль (%), чтобы определить, является ли значение целым или нет.

x = y % 1  

если y - что-то другое, чем целое число, результат не равен нулю (0). Тогда тест будет:

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. 

Конечно, мы будем рассматривать отрицательное число как целое, а затем просто обернуть ABS () вокруг y, чтобы всегда проверять положительное.

...