整数或十进制数

时间:2012-06-14 21:26:54

标签: php

我正在寻找一个测试整数是否为整数的函数。 到目前为止,我有这个:

if (is_numeric($answer3)) {
    echo "Is triangular\n";
} else {
    echo "Is not triangular\n";
}

但是这总是返回“Is triangular”,即使$ answer3是小数。

如何测试整数以查看它是否有小数?

9 个答案:

答案 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";
}