Practical PHP Programming

四舍五入

float ceil ( float value)
float floor ( float value)
float round ( float value [, int precision])

通常情况下,我们所需要的精度要比PHP计算得到的精度小,这种情况下,我们就需要用到下面的函数了:ceil()floor()round()

ceil()floor()都只有要进行舍入的数字这一个参数。ceil()取大于传入值的最小的整数(向上取整),floor()取小于传入值的最大的整数(向下取整)。来看个例子:

<?php
    $someval = 4.9;
    $ceiled = ceil($someval);
    $floored = floor($someval);
?>

执行上述代码,$ceild结果为5,$floored结果为4。

作者说明:floor()函数将浮点型转换为整型的工作方式和强制类型转换差不多,而且强制类型转换更快一点。二者的区别是在负数的处理上,floor()将-4.5向下取整得到-5,而强制类型转换的结果是-4、

另外一个函数是round(),它有两个参数:要进行舍入的数和要保留的小数位数。如果最后正好是5的话,round()将会自动进上一位。

<?php
    $a = round(4.9); // 5
    $b = round(4.5); // 5
    $c = round(4.4999); // 4
    $d = round(4.123456, 3); // 4.123
    $e = round(4.12345, 4); // 4.1235
    $f = round(1000 / 160); // 6
?>

如上所示,4.5进位成了5,而4.4999则被舍去成了4。第四行中我们第一次使用两个参数,这样能将给定的数值舍入到想要的小数位数。第五行中,保留四位小数,结果是4.1235。根据四舍五入的原则,如果原给定的数值是4.12344,那么结果就是4.1234了。

最后一行也是一个经常使用的例子。假设你要组织一次大的旅行,有1000人参加。你需要知道你要用多少节车厢。假设一节车厢能容纳160人,1000/160四舍五入后得到整数6.现在问题来了,1000/160实际等于6.25。因为6.25距离6更近,PHP将小时舍掉了。这样多出来的人就没法走了。怎么办呢?解决方法很简单,用ceil()函数就可以了。在不同情况下需要使用不同的函数。具体问题具体分析就好。