Home » Php » php – Why would is_int(sqrt(100)) return false

php – Why would is_int(sqrt(100)) return false

Questions:

Does anyone know why this always returns False?

``````is_int(sqrt(100))
``````

and what syntax should i use to check is square root is an integer ?

If you want to check whether a `sqrt` is an integer, you can do:

``````\$root = sqrt(\$val);

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

`sqrt` function returns `float` value, not `int`.

The problem here is in your definition of "integer". You’re reading it as "a value with no non-zero fractional significant figures", whereas in `is_int` it just refers to a datatype, i.e. literally anything with type `int`.

That is, the floating-point value `10.0` is still a floating-point value, even though its mathematical value is equal to that of the integer `10`.

The result of `sqrt` is never an integer; however, you can check whether a floating-point value has any non-zero fractional significant figures by comparing it to one in which you deliberately took them all off.

A naive implementation:

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

However, of course you should never compare anything against a floating-point value with `==`; use your favourite floating-point equality mechanism to perform this test.

Update

Actually, I suppose the only values for which this comparison could potentially fail are fractional, in which case the test should fail anyway. So `==` might be sufficient.

`sqrt` returns a float, not an integer, therefore `is_int` returns false.
Try use `is_float` instead.
Data type of `sqrt(100) is float`. `is_int` checks for the data type not the `value`