Php 为什么_int(sqrt(100))返回false
有人知道为什么它总是返回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()始终返回数据类型浮点的
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
。是的,C997.12.1/2
说它是实现定义的。