1、PHP数字定义
- PHP数字分为两组:整型数和浮点数。整型数就是整数,浮点数就是小数。PHP中整型数和浮点数自动转换。所以在PHP中3/2的结果是1.5而不是1。
- PHP还可以自动完成字符串与数字的转换。例如,1+”1”=2
2、检查变量是否是一个合法的数字
问题:
希望确保变量包含一个数(即使变量的类型是字符串)。或者,希望检查变量不仅仅是一个数,而且要特别指定其类型是一个数字类型。
解决方案:
使用is_numeric() 检查一个变量是否是一个数。
示例
//is_numeric不判断数据类型
$arr=array(5,'5','05',12.3,'16.7','five','10e20',0xDECAFBAD);
foreach($arr as $num){
if(is_numeric($num)){
echo "yes<br/>";
}else{
echo "no<br/>";
}
}
//输出
yes
yes
yes
yes
yes
no
yes
yes
扩展:is_numeric() 的有关文档http://www.php.net/is-numeric
3、比较浮点数
问题:
希望检查两个浮点数是否相等。
解决方案:
使用一个delta值,检查两个数字之差是否小于这个delta值。
示例
//高精度的浮点数,不能直接用==来判断是否相等,浮点数会缺失精度
$delta=0.00001;
$a=1.0000001;
$b=1.0000000;
if(abs($a-$b)<$delta){
echo 'a=b';
}else{
echo 'a!=b';
}
//输出
a=b
扩展:abs() 的有关文档http://www.php.net/abs
4、浮点数舍入
问题:
希望舍入一个浮点数,可能取整为一个整数,或者舍入为指定的小数位数。
解决方案:
要把一个数取整为最接近的数,可以使用round(),如果在两个数之间,那么就取远离0的整数。向上取整用ceil(),向下取整用floor()
示例
//round()函数可以由第二个参数来决定,保留几位小数。
$num1=round(2.4);
$num2=round(2.32,1); //表示保留一位小数
$num3=ceil(3.4);
$num4=floor(3.7);
$num5=round(2.5);
$num6=round(-2.5); //取远离0的整数
//输出
2
2.3
4
3
3
-3
扩展:round() 的有关文档http://www.php.net/round
5、处理一系列整数
问题:
希望一段代码在一个整数范围内都可以使用。
解决方案:
使用rang($start,$end),产生一个数组,或者使用for循环实现。
示例
//range()函数可以是数字数组,也可以是字符数组。可以使用第三个参数控制步长
//优点是:使用起来比较方便,缺点是:生成不必要的数组会占用内存
$num=range(3,7);
$char=range('a','e');
foreach($num as $n){
echo $n." ";
}
foreach($char as $c){
echo $c." ";
}
//输出
3 4 5 6 7
a b c d e
扩展:range() 的有关文档http://www.php.net/range
6、在指定范围内生成随机数
问题:
希望在指定的数字范围内,生成一个随机数,如果要让随机数可以预测,那么就需要先mt_srand()来初始化,随机数种子。
解决方案:
使用mt_rand() 相比于 rand(),性能更好,更加不可预测。
示例
//mt_rand(min,max)生成的随机数包括min和max
$num=mt_rand(65,97);
//生成一个可以预测的随机数
mt_srand(321);
$num1=mt_rand();
mt_srand(321);
$num2=mt_rand();
//输出
68 //这个值不可预测
18 //这个值与下面的值相同
18
扩展:mt_rand() 的有关文档http://www.php.net/mt_rand
7、计算对数和指数
问题:
希望计算一个数的对数和指数
解决方案:
使用log() 、exp() 、pow()。
示例
//log()表示以e为底的对数,exp()表示以e为底的指数,pow()可以表示乘方
$log1=$log(10);
$log2=$log(10,2); //表示以2为底10的对数
$exp=exp(2);
$pow=pow(2,3); //表示2的三次方,指数可以是小数
//输出
2.30258
3.32
7.389
8
扩展:log() 的有关文档http://www.php.net/log
8、格式化数字
问题:
希望输出一个数,要包括千分位分隔符和小数点。或者显示百分比。
解决方案:
如果总是需要小数点和千分位分隔符等特定字符,可以使用number_format()。
示例
$number = 1234.56;
//默认带有以,作为千分位分隔符,不保留小数,默认取整。
$formmat_num1=number_format($number);
$formmat_num2=number_format($number,2);
//第三个小数表示小数点分隔符,第四个表示千分位分隔符
$formmat_num3=number_format($number,2,'.',' ');
//输出
1,234
1,234.56
1 234.56
扩展:number_format() 的有关文档http://www.php.net/number_format