我怎样才能确保浮点数总是用PHP舍入?

Sot*_*ris 27 php floating-point precision rounding ceil

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

1.1 to 2
1.2 to 2
1.9 to 2
2.3 to 3
2.8 to 3
Run Code Online (Sandbox Code Playgroud)

我知道round()函数存在,但如果找到任何小数,我看不到任何舍入函数.有没有简单的方法来做到这一点?

irc*_*ell 62

使用ceil功能:

$number = ceil(1.1); //2
Run Code Online (Sandbox Code Playgroud)

  • 有时`ceil`(或`floor`)不是四舍五入的正确答案。你可以很容易地得到一个表现出乎意料的计算结果:`ceil((0.1 + 0.2) * 10)` 产生 `4`! (3认同)

ash*_*ash 18

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

ceil(1024.321 * 100) / 100;
Run Code Online (Sandbox Code Playgroud)

乘以100除以100只能用百分之一.这在十分之一,千分之一,十万分之一等方面都不准确.

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

结果:

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)
Run Code Online (Sandbox Code Playgroud)

笔记:

感谢Joseph McDermott和brandom为改进我的原始片段所做的贡献.


let*_*ngo 10

Ceil会为你做这件事

取自示例:

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>
Run Code Online (Sandbox Code Playgroud)


Bla*_*umb 10

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

ceil(1024.321*100)/100
Run Code Online (Sandbox Code Playgroud)

会产生1024.33