题
为什么输出是 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 类似的隐藏内部表示中。那么,在求平方根后,如何知道给定的数字是否为整数呢?
那么你如何区分 4
和 4.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
}
其他提示
没有,这不是一个整数。 这是一个浮。
您可以使用地板函数来获取值的整数部分,减去原值。如果差!= 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。
不隶属于 StackOverflow