有谁知道为什么这总是返回False?
is_int(sqrt(100))
我应该用什么语法来检查平方根是一个整数?
答案 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)
答案 4 :(得分:1)
is_int()引用结果的数据类型,而不是该结果中包含的值。 sqrt()始终返回数据类型float的结果,而不管值
答案 5 :(得分:-1)
sqrt(100) is float
的数据类型。 is_int
检查的数据类型不是value