PHP中:`floor()` 、`ceil()` 和`round()`使用哪一个?

375 阅读3分钟

很多程序,不管是大的还是小的,都需要我们与数字打交道。在PHP中,有两种定义数字的方法。它们可以是浮点数,也可以是整数。我们也可以用字符串来表示非常大的数字。

在这里,我们的重点将是一些与整数和浮点数有关的函数。我们将讨论 [floor()](https://www.php.net/manual/en/function.floor.php), [ceil()](https://www.php.net/manual/en/function.ceil.php)[round()](https://www.php.net/manual/en/function.round.php).

定义

让我们先来看看所有函数的用途。

  1. floor() - 这个函数将浮点数向下舍入到前面的整数。例如,5.2变成5,8.9变成8。
  2. ceil() - 这个函数将浮动数向上舍入为整数。例如,5.2变成6,8.9变成9。
  3. round() - 这个函数返回一个已经向上或向下舍入并近似于指定精度的浮点数。如果你没有指定任何精度,它将四舍五入到最接近的整数:5.2变成5,8.9变成9。

记住,这些函数的返回值从数学上讲将是整数,但它们仍将是一种浮点数据类型。

你应该使用哪一个?

所有的函数在特定情况下都是有用的,我们将在下面介绍。

PHPfloor() vs PHPceil()

当你处理只需要使用整数的情况时,函数floor()ceil() 是有用的。请看下面两个例子。

假设你要写一个程序来确定将一些鸡蛋运往市场所需的集装箱的数量。我们在这里受到两个限制。首先,集装箱不能是分数。第二,我们需要运送所有的鸡蛋。这意味着我们将需要一个完整的容器,即使它没有被完全装满。因此,我们应该使用ceil()

<?php

$egg_count = 510;
$container_capacity = 50;

$containers_needed = ceil($egg_count/$container_capacity);

echo $containers_needed;
// 11

?>

考虑另一种情况,你必须确定有多少人可以用现有的食物完全吃饱。在这种情况下,只有当你确定可以用现有的食物喂饱他们而不需要额外订购任何东西时,你才需要邀请人们。我们将不得不忽略剩余的食物,因为这些食物不能喂养一个成年人。因此,我们应该使用floor()

<?php

$burger_count = 110;
$burgers_per_person = 3;

$persons_fed = floor($burger_count/$burgers_per_person);

echo $persons_fed;
// 36

?>

PHPround()

PHPround() 函数与floor()ceil() 不同,因为它把我们带到最接近的整数(当没有指定精度时),而不是总是向上或向下取整。它需要三个参数。

  1. 你想四舍五入的数字。
  2. 用于四舍五入的精度。默认值是零,意味着小数点后没有数字。
  3. 用于四舍五入的模式,如3.5、2.5和-4.5。

这个函数通常用于在日常情况下简化数字,我们不需要完全的精度。在科学上,我们也可以使用round() ,以摆脱由计算增加的超过这些计算中使用的数据精度的额外虚假精度。

<?php

$people_count = 13097824;

$car_count = 3987;

function make_approximations($number, $digits) {
    if ($digits < 0) {
        return round($number, $digits)/10**abs($digits);
    } else {
        return round($number, $digits);
    }
}

echo 'There are approximately '.make_approximations($people_count, -6).' million people in our city.';
// There are approximately 13 million people in our city.

echo 'Around '.make_approximations($car_count, -3).' thousand cars pass this intersection everyday.';
// Around 4 thousand cars pass this intersection everyday.

$plot_length = 22.03;
$plot_width = 20.18;

echo 'Our plot is around '.make_approximations($plot_length*$plot_width, 2).' sq.m. in area.';
// Our plot is around 444.57 sq.m. in area.
?>

总之,在日常生活中,当一个数字的精确值并不重要,而我们需要一个易于记忆的近似值时,使用round() 是有帮助的。

最后的思考

在本教程中,我们简要地讨论了如何使用floor()ceil()round() 。当你总是想得到下一个最低的整数时,函数floor() ,当你想得到下一个最高的整数时,函数ceil() 是有用的。round() 函数是用来四舍五入到指定精度的最接近的数字(整数或其他)。