PHP中的平方根

时间:2009-10-31 14:18:15

标签: php sqrt

为什么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类似。 那么你怎么能知道在取平方根后给定的数字是整数?

那么如何在不使用正则表达式的情况下区分PHP中的44.12323

6 个答案:

答案 0 :(得分:16)

根据PHP手册float sqrt ( float $arg ),sqrt()总是返回一个浮点数。使用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
}

答案 1 :(得分:9)

不,它不是整数。 It's a float

答案 2 :(得分:5)

在API中说它是正确的,返回类型是float。

http://us2.php.net/sqrt

 float sqrt  ( float $arg  )

返回arg的平方根。

答案 3 :(得分:3)

您可以使用floor函数获取值的整数部分并减去原始值。如果差异是!= 0那么它不是整数。 e.g。

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

答案 4 :(得分:2)

因为它总是返回一个浮点数:

float sqrt(float $arg)

如果需要,可以将其转换为整数:

intval(sqrt(16));

编辑,好吧:

$sqrt = sqrt(16);

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

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

var_dump($sqrt);

答案 5 :(得分:0)

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

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

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