21、PHP 8.4 新特性 - 新函数 bcceil,bcfloor,bcround

作者: 温新

图书: 【PHP 8.4 新特性】

阅读: 162

时间: 2025-01-18 08:18:56

PHP 8.4 中,新增了三个用于处理高精度浮点数的函数:bcceil()bcfloor()bcround()。这些函数是 BCMath 扩展 中的新成员,旨在提供高精度的数学操作,尤其适用于需要精确控制小数位数的场景。

这三个函数分别对应于数学中的 向上取整(ceil)、向下取整(floor)和 四舍五入(round)操作,但它们在处理精度时更加精确,适用于需要更多精度的应用场景。

bcceil

/**
* $num:要向上取整的数字(字符串形式)
* $scale:可选参数,指定小数点后的位数,默认为 0,表示取整到整数
*
* 返回一个字符串,表示取整后的数字。
**/
bcceil(string $num, int $scale = 0): string

bcceil() 函数返回给定数字的 向上取整(ceiling)值。它会将数字舍入到最接近的整数,如果数字已经是整数,则返回该整数。

<?php

declare(strict_types=1);

echo bcceil("1.234") . PHP_EOL;   // 输出 2
echo bcceil("3.000") . PHP_EOL;   // 输出 3
echo bcceil("-3.1415") . PHP_EOL; // 输出 -3

bcfloor

/**
* $num:要向下取整的数字(字符串形式)
* $scale:可选参数,指定小数点后的位数,默认为 0,表示取整到整数。
*
* 返回一个字符串,表示取整后的数字。
*/
bcfloor(string $num, int $scale = 0): string

bcfloor() 函数返回给定数字的 向下取整(floor)值。它会将数字舍入到最接近的整数,如果数字已经是整数,则返回该整数。

<?php

declare(strict_types=1);

echo bcfloor("1.234") . PHP_EOL;   // 输出 1
echo bcfloor("3.999") . PHP_EOL;   // 输出 3
echo bcfloor("-3.1415") . PHP_EOL; // 输出 -4

bcround

/**
* $num:要四舍五入的数字(字符串形式)
* $scale:可选参数,指定小数点后的位数,默认为 0,表示四舍五入到整数
*
* 返回一个字符串,表示四舍五入后的数字
**/
bcround(string $num, int $scale = 0): string

bcround() 函数用于 四舍五入 给定的数字。它通过指定的精度(小数点后的位数)对数字进行舍入。与常规的 round() 函数不同,bcround() 是针对高精度浮点数的,适用于需要精确处理小数的场景

<?php

declare(strict_types=1);

echo bcround("1.234", 2) . PHP_EOL;  // 输出 1.23
echo bcround("3.999", 0) . PHP_EOL;  // 输出 4
echo bcround("-3.1415", 2) . PHP_EOL; // 输出 -3.14

函数对比

函数 功能 默认行为(scale = 0
bcceil() 向上取整 取整数部分,向更大值取整
bcfloor() 向下取整 取整数部分,向更小值取整
bcround() 四舍五入 四舍五入到整数

总结与应用场景

  • bcceil():适用于需要将数字向上取整的场景,例如在处理金额时,可能希望避免给客户提供不准确的小数值。
  • bcfloor():适用于需要将数字向下取整的场景,例如计算时不希望有小数部分,或者想要减少计算结果中的金额。
  • bcround():适用于需要精确控制小数点后位数并且进行四舍五入的场景,常见于财务应用中。
请登录后再评论