我正在寻找一个测试整数是否为整数的函数。 到目前为止,我有这个:
if (is_numeric($answer3)) {
echo "Is triangular\n";
} else {
echo "Is not triangular\n";
}
但是这总是返回“Is triangular”,即使$ answer3是小数。
如何测试整数以查看它是否有小数?
答案 0 :(得分:16)
is_numeric也会为浮点数返回true
查找给定变量是否为数字。数字字符串组成 可选符号,任意位数,可选小数部分和 可选的指数部分。因此+ 0123.45e6是有效的数值。 也允许使用十六进制表示法(0xFF),但只能使用无符号, 十进制和指数部分。
您可以尝试使用is_float(),但如果输入是字符串则无法使用。
var_dump( is_float( '23.5' ) ); // return false
因此,如果您正在处理某个数字的字符串表示形式,那么只需查找.
if ( strpos( $answer3, '.' ) === false )
如果需要,可以添加is_numeric
// Make sure its numeric and has no decimal point
if ( is_numeric( $answer3 ) && strpos( $answer3, '.' ) === false )
答案 1 :(得分:13)
10.0
应该被视为整数还是浮点数?如果是整数,那么您正在寻找fmod()
:
if (fmod($number, 1) == 0) // $number DOES NOT have a significant decimal part
{
// is whole number
}
否则,is_int()
就足够了。
编辑:检查无效小数部分的另一种方法是:
if (round($number, 0) == $number)
{
// is whole number
}
答案 2 :(得分:4)
is_int
如果你还需要它是整数类型,ctype_digit
如果您正在测试字符串,filter_var($input,FILTER_VALIDATE_INT)
为所有人。并搜索手册
答案 3 :(得分:2)
我已经尝试了几个答案(也来自其他页面),但在我的情况下效果最好的是:
$number = floatval($number);
if ($number == round($number)) {
// Number does not have decimals (or .00000)
}else{
// Number does have decimals
}
答案 4 :(得分:2)
也许这是最优雅的解决方案:
if ( $answer3 != (int) ( $answer3 ) ) {
答案 5 :(得分:1)
如果$ answer3不是字符串,您可以尝试使用:
is_float()
查看是否为浮点值,而不仅仅是数值。
答案 6 :(得分:0)
我检查了所有的答案,很少有人试图检查浮动部分。这是正确的做法,除了使用等号比较浮点数不是一个好主意。最佳解决方案是:
function isIntegerNumber($number){
$floor = floor($number);
$fract = abs($number - $floor);
return is_numeric($number) && $fract < 1e-16;
}
echo var_export(isIntegerNumber("10X"), true).PHP_EOL;
echo var_export(isIntegerNumber("3.0001"), true).PHP_EOL;
echo var_export(isIntegerNumber("-23.0001"), true).PHP_EOL;
echo var_export(isIntegerNumber(-10.01), true).PHP_EOL;
echo var_export(isIntegerNumber("3.00"), true).PHP_EOL;
echo var_export(isIntegerNumber("-23.00"), true).PHP_EOL;
echo var_export(isIntegerNumber(-10.00), true).PHP_EOL;
echo var_export(isIntegerNumber(5), true).PHP_EOL;
echo var_export(isIntegerNumber(-5), true).PHP_EOL;
$tricky = (0.1+0.7)*10.0;
echo "now something a bit tricky: ".PHP_EOL;
echo "(0.1+0.7)*10.0 = ".var_export($tricky, true) .' (type: "'.gettype($tricky).'")'.PHP_EOL;
echo 'is it int: '.var_export(isIntegerNumber($tricky), true).PHP_EOL;
echo 'is it 8: '.var_export($tricky == 8, true).PHP_EOL;
结果:
false
false
false
false
true
true
true
true
true
now something a bit tricky:
(0.1+0.7)*10.0 = 7.9999999999999991 (type: "double")
is it int: false
is it 8: false
答案 7 :(得分:0)
我是一个全新的,但我想通过简单检查检查PHP中的数字是浮点数还是整数的最佳方法是:
if ($number == round($number)) { } else { }
如果它真的是一个整数,它将是相等的。
答案 8 :(得分:-1)
试试这个
if(!is_numeric($nabtron) || $nabtron != floor($nabtron) || $nabtron < 0){
echo "it's not numeric or is a float or a negative number";
}
或者如果您需要积极的结果:
if(is_numeric($nabtron) && $nabtron == floor($nabtron) && $nabtron < 0){
echo "it's numeric and not a float and is zero or positive number";
}