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

sil*_*min 7 php integer

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

is_int(sqrt(100))
Run Code Online (Sandbox Code Playgroud)

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

hsz*_*hsz 10

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


Lig*_*ica 6

这里的问题在于你的"整数"的定义.你把它读作"没有非零分数有效数字的值",而is_int它只是指数据类型,即字面上任何类型的东西int.

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

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

一个天真的实现:

$sqrt = sqrt(100);
if ($sqrt == (int)$sqrt) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

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

更新

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


Fel*_*ing 3

如果你想检查 a 是否sqrt是整数,你可以这样做:

$root = sqrt($val);

if((int) $root == $root)) {
    // root is integer
}
Run Code Online (Sandbox Code Playgroud)