PHP经典实例读书笔记--数字

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值