为什么输出是 sqrt PHP 中的“16”不是整数吗?

例子

php > $fig = 16;
php > $sq = sqrt($fig); //should be 4
php > echo $sq;
4
php > echo is_int($sq);            // should give 1, but gives false
php > 

我觉得问题出在 PHP 与 Python 类似的隐藏内部表示中。那么,在求平方根后,如何知道给定的数字是否为整数呢?

那么你如何区分 44.12323 在 PHP 中不使用正则表达式?

有帮助吗?

解决方案

根据PHP手册,float sqrt ( float $arg ),SQRT()总是返回float。使用is_int()函数,因为它检查的数据类型,并返回一个失败并不能解决问题。

要解决这个问题,可以通过使用弹性模量,而不是对其进行测试:(必须是FMOD(),用于浮点模量,而不是为了整数模量%运算符)

if (fmod(sqrt(16), 1) == 0) {
   // is an integer
}

如果您使用的是PHP 5.2.0或更高版本,相信这也将工作,但我还没有这种类型的情况下的使用它是肯定的:

$result = sqrt(16);
if (filter_var($result, FILTER_VALIDATE_INT)) {
    // is an integer
}

其他提示

没有,这不是一个整数。 这是一个浮

说该API权,返回类型是浮点数。

http://us2.php.net/sqrt

 float sqrt  ( float $arg  )

返回arg的平方根。

您可以使用地板函数来获取值的整数部分,减去原值。如果差!= 0,那么它不是一个整数。 e.g。

if (($sq - floor($sq)) == 0){
   YES
}else{
 NO
}

由于它总是返回float:

float sqrt(float $arg)

您可以将它转换成整数,如果你想:

intval(sqrt(16));

修改,然后确定:

$sqrt = sqrt(16);

if (strpos($sqrt, '.') !== false)
{
    $sqrt = intval($sqrt);
}

else
{
    $sqrt = floatval($sqrt);
}

var_dump($sqrt);

检查整数的另一种方法是将其转换为字符串并使用 ctype_digit()

$result = sqrt(16);
if (ctype_digit((string)$result)) {
   // is an integer
}

当然,与在进行计算时使用模数相比,这是一种有点奇怪的方式。但在测试从表单发布的值时它很方便,因为它们一开始就是字符串。 需要注意的是,对于负整数它将返回 false。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top