Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么_int(sqrt(100))返回false_Php_Integer - Fatal编程技术网

Php 为什么_int(sqrt(100))返回false

Php 为什么_int(sqrt(100))返回false,php,integer,Php,Integer,有人知道为什么它总是返回False吗 is_int(sqrt(100)) 我应该用什么语法检查平方根是整数 函数返回float值,而不是int返回一个浮点值,而不是整数,因此返回false 请尝试改用。如果要检查sqrt是否为整数,可以执行以下操作: $root = sqrt($val); if((int) $root == $root)) { // root is integer } is_int()指的是结果的数据类型,而不是该结果中包含的值。sqrt()始终返回数据类型浮点的

有人知道为什么它总是返回False吗

is_int(sqrt(100))
我应该用什么语法检查平方根是整数

函数返回
float
值,而不是
int

返回一个浮点值,而不是整数,因此返回false


请尝试改用。

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

$root = sqrt($val);

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

is_int()指的是结果的数据类型,而不是该结果中包含的值。sqrt()始终返回数据类型浮点的结果,而不管
sqrt(100)的数据类型是否为浮点
is_int
检查数据类型而不是

这里的问题在于“整数”的定义。您将其解读为“一个没有非零小数有效数字的值”,而在
中,它只是指一个数据类型,也就是说,任何类型为
int
的数据

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

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

天真的实现:

$sqrt = sqrt(100);
if ($sqrt == (int)$sqrt) {
   // ...
}
但是,您当然不应该将任何内容与具有
==
的浮点值进行比较;使用您喜爱的浮点相等机制执行此测试

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

那么等于10的浮点值不就可以作为整数了吗?@silkAdmin:显然不是PNot excly-
10
仍然可以是
float
,末尾是
.0
,不回显;-)PHP引擎仍然将其视为
浮点
。如果你想让它成为
int
,你可以用
(int)sqrt(100)
@silkAdmin:显然不是
is_int(10.0)
返回
false
。但是,如果要检查
sqrt
结果是否为
int
,请执行以下测试:
$sqrt=sqrt(100);如果($sqrt==(int)$sqrt){}
是的,但是在这种情况下,它总是返回false?好吧,如果你问一个
浮点值
如果它是一个
整数
它总是会说不!但是有一些方法可以转换它们,看看@hsz在另一个回复中的评论,他展示了它是如何实现的。我不认为
是如何实现浮点数(sqrt(x))
的。除了
true
之外,表达式实际上没有什么可以计算的。它在某些情况下很有用,但到目前为止我很少使用它。很抱歉,我的问题的格式和派生主题不是很好,尽管您完全回答了我最初的问题。谢谢这个答案只是复制了你10分钟前发布的前两个答案,并且没有提供他们之外的任何信息。如果你喜欢他们的答案,就给他们投票,而不是用
=
比较浮点值?淘气的。。。但是,仔细想想,是否有任何整数浮点值会被此测试破坏?对于诸如sqrt(-100)之类的负值,可能会失败,但作为最全面的答案,值a+1question@MarkBaker:
sqrt
的参数必须是正的。如果不是正的,你得到一个可以用is_nan()@MarkBaker:(a)nan
==
(int)nan
测试的返回值无论如何都会产生
false
,因此它已经否定了你的初始注释。(b) 我不相信
sqrt(-100)
的计算结果肯定是
NaN
;我相信它只能保证将
errno
设置为
EDOM
。是的,C99
7.12.1/2
说它是实现定义的。