
PHP中判断奇偶数遇到的问题
我写了一个PHP的判断输入数字奇偶数的程序,当他超过10位数时,无论奇偶数都会判断成奇数。是怎么回事?<tableborder="0"align="center"cell...
我写了一个PHP的判断输入数字奇偶数的程序,当他超过10位数时,无论奇偶数都会判断成奇数。是怎么回事?
<table border="0" align="center" cellpadding="0" cellspacing="0">
<form method="post" aciton="#">
<tr>
<td>请输入任意数字</td>
<td><input type="text" name="text" ></td>
<td><input type="submit" value="检测" ></td>
</tr>
<tr>
<td colspan="3" height="25" align="center" valign="middle">
<?php
#自主练习
if($_POST['text'] != ''){
$number = $_POST['text'];
if(is_numeric($number) and $number%2==0)
echo $number."是偶数";
elseif (is_numeric($number))
echo $number."是奇数";
else echo"输入的不是纯数字";
}
?>
</td>
</tr>
</form>
</table>
如果单独把中间这段代码提出来就不存在这种问题,是哪里写错了呢?
<?php
$number =44444444444444444444444444444444444444444444444;
if(is_numeric($number) and $number%2==0)
echo $number."是偶数";
elseif (is_numeric($number))
echo $number."是奇数";
?> 展开
<table border="0" align="center" cellpadding="0" cellspacing="0">
<form method="post" aciton="#">
<tr>
<td>请输入任意数字</td>
<td><input type="text" name="text" ></td>
<td><input type="submit" value="检测" ></td>
</tr>
<tr>
<td colspan="3" height="25" align="center" valign="middle">
<?php
#自主练习
if($_POST['text'] != ''){
$number = $_POST['text'];
if(is_numeric($number) and $number%2==0)
echo $number."是偶数";
elseif (is_numeric($number))
echo $number."是奇数";
else echo"输入的不是纯数字";
}
?>
</td>
</tr>
</form>
</table>
如果单独把中间这段代码提出来就不存在这种问题,是哪里写错了呢?
<?php
$number =44444444444444444444444444444444444444444444444;
if(is_numeric($number) and $number%2==0)
echo $number."是偶数";
elseif (is_numeric($number))
echo $number."是奇数";
?> 展开
2个回答
展开全部
因为PHP没有形成的判断奇偶函数,所以以前一直使用 %2 来判断一个数字变量是奇数还是偶数,如果把该变量 mod2 得到结果是1那么就是奇数,得到结果是 0 那么就是偶数。最近看了PHP手册,发现除了使用算术运算符判断,还可以使用位运算符来判断。
<?php
//判断奇数,是返回TRUE,否返回FALSE
function is_odd($num){
return (is_numeric($num)&($num&1));
}
//判断偶数,是返回TRUE,否返回FALSE
function is_even($num){
return (is_numeric($num)&(!($num&1)));
}
?>
当然,如果已经知道变量值是数字而非字符或字符串,则可以省略 is_numeric 函数的判断,直接使用 $num&1 来判断就行了。
<?php
//判断奇数,是返回TRUE,否返回FALSE
function is_odd($num){
return (is_numeric($num)&($num&1));
}
//判断偶数,是返回TRUE,否返回FALSE
function is_even($num){
return (is_numeric($num)&(!($num&1)));
}
?>
当然,如果已经知道变量值是数字而非字符或字符串,则可以省略 is_numeric 函数的判断,直接使用 $num&1 来判断就行了。
追问
多谢!学到了新方法!那么能解释一下为什么用%2超过10位数会出现错误吗?而且单独提取出来这一段却没事。想弄清楚了一点
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |