如果任何小数存在,我想确保PHP中的浮点数被舍入,而不必担心数学舍入规则。该功能的工作原理如下:
1.1 to 2
1.2 to 2
1.9 to 2
2.3 to 3
2.8 to 3
我知道round()
函数存在,但如果找到任何小数,我看不到任何舍入函数。有没有简单的方法呢?
答案 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)
答案 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)