31

如果存在任何小数,我想确保 PHP 中的浮点数被四舍五入,而不用担心数学舍入规则。此功能将按如下方式工作:

1.1 to 2
1.2 to 2
1.9 to 2
2.3 to 3
2.8 to 3

我知道该round()函数存在,但如果找到任何小数,我看不到任何用于四舍五入的函数。有什么简单的方法可以做到这一点?

4

5 回答 5

65

使用ceil功能:

$number = ceil(1.1); //2
于 2011-02-23T16:19:14.317 回答
21

我知道这是一个老话题,但它出现在 Google 中。我将扩展 Blake Plumb 关于精度的答案。

ceil(1024.321 * 100) / 100;

乘以 100 除以 100 只适用于百分之一。这在十分之一、千分之一、千分之一等方面是不准确的。

function round_up($number, $precision = 2)
{
    $fig = pow(10, $precision);
    return (ceil($number * $fig) / $fig);
}

结果:

var_dump(round_up(1024.654321, 0)); // Output: float(1025)
var_dump(round_up(1024.654321, 1)); // Output: float(1024.7)
var_dump(round_up(1024.654321, 2)); // Output: float(1024.66)
var_dump(round_up(1024.654321, 3)); // Output: float(1024.655)
var_dump(round_up(1024.654321, 4)); // Output: float(1024.6544)
var_dump(round_up(1024.654321, 5)); // Output: float(1024.65433)
var_dump(round_up(1024.654321, 6)); // Output: float(1024.654321)

笔记:

感谢 Joseph McDermott 和 Brandom 为改进我的原始代码片段所做的贡献。

于 2014-03-06T13:17:55.660 回答
12

官方的Ceil功能将为您做到这一点。

取自示例:

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>
于 2011-02-23T16:20:16.940 回答
10

我知道这个问题早就被回答了,但是当我对这个话题进行谷歌搜索时,它就出现了。如果您想精确地进行四舍五入,那么一个好方法是使用 ceil 函数并将数字乘以您想要表示的小数点数,然后除以该数字。

ceil(1024.321*100)/100

将产生 1024.33

于 2012-11-15T17:42:33.903 回答
3

我喜欢 Ash 的回应,尽管我会:

$fig = (int) str_pad('1', $precision + 1, '0');

有道理,如果我提供精度“2”,我希望它四舍五入到小数点后 2 位。虽然我想是选择的问题。感谢灰烬的回答,效果很好。

于 2015-03-05T10:25:14.293 回答