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
как целое число, тогда это совсем другая история.