如何确保浮点数始终用PHP舍入?

时间:2011-02-23 16:18:14

标签: php floating-point rounding precision ceil

如果任何小数存在,我想确保PHP中的浮点数被舍入,而不必担心数学舍入规则。该功能的工作原理如下:

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

我知道round()函数存在,但如果找到任何小数,我看不到任何舍入函数。有没有简单的方法呢?

6 个答案:

答案 0 :(得分:61)

使用ceil功能:

$number = ceil(1.1); //2

答案 1 :(得分:17)

我知道这是一个老话题,但它出现在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为改进原始片段所做的贡献。

答案 2 :(得分:10)

Ceil会为您做到这一点

取自示例:

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>

答案 3 :(得分:10)

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

ceil(1024.321*100)/100

会产生1024.33

答案 4 :(得分:2)

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

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

有意义的是,如果我提供精度'2',我希望它四舍五入到小数点后两位。我猜想,选择的问题。谢谢你的回答Ash,效果很好。

答案 5 :(得分:2)

我喜欢Ash的回答和Joseph的选择所以我建议:

$fig = pow(10, $precision);

它应该也适用于零和负精度值es:

var_dump(round_up(1024.654321, -1)); // Output: float(103)