为什么is_int(sqrt(100))返回false

时间:2012-03-02 16:33:03

标签: php integer

有谁知道为什么这总是返回False?

is_int(sqrt(100))

我应该用什么语法来检查平方根是一个整数?

6 个答案:

答案 0 :(得分:10)

sqrt函数返回float值,而不是int

答案 1 :(得分:6)

这里的问题在于你对“整数”的定义。您将其视为“没有非零小数有效数字的值”,而在is_int中它只是指数据类型,即字面上任何类型为int的数据类型。

也就是说,浮点值10.0仍然是浮点值,即使其数学值等于整数10的数学值。

sqrt的结果是从不整数;但是,您可以通过将浮点值与故意将其全部关闭的数字进行比较来检查浮点值是否具有任何非零的有效数字。

天真的实施:

$sqrt = sqrt(100);
if ($sqrt == (int)$sqrt) {
   // ...
}

但是,当然不应该将任何内容与浮点值进行比较==;使用您最喜欢的浮点相等机制来执行此测试。

更新

实际上,我认为这种比较可能失败的唯一值是分数,在这种情况下测试应该失败。所以==可能就足够了。

答案 2 :(得分:3)

如果要检查sqrt是否为整数,可以执行以下操作:

$root = sqrt($val);

if((int) $root == $root)) {
    // root is integer
}

答案 3 :(得分:2)

sqrt返回一个浮点数,而不是一个整数,因此is_int返回false。

请尝试使用is_float

答案 4 :(得分:1)

is_int()引用结果的数据类型,而不是该结果中包含的值。 sqrt()始终返回数据类型float的结果,而不管值

答案 5 :(得分:-1)

sqrt(100) is float的数据类型。 is_int检查的数据类型不是value