How can I make sure a float will always be rounded up with PHP?

巧了我就是萌 提交于 2019-11-27 14:26:00

问题


I want to make sure a float in PHP is rounded up if any decimal is present, without worrying about mathematical rounding rules. This function would work as follows:

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

I know the round() function exists but I don't see any function for rounding up if any decimal is found. Is there any easy way to do this?


回答1:


Use the ceil function:

$number = ceil(1.1); //2



回答2:


I know this is an old topic, however it appears in Google. I will extend Blake Plumb's answer regarding precision.

ceil(1024.321 * 100) / 100;

Multiplying by 100 and dividing by 100 only works with one-hundredths. This isn't accurate on tenths, one-thousandths, one-hundred thousandths, etc.

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

Results:

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)

Notes:

Thanks for the contributions from Joseph McDermott and brandom for improving my original snippet.




回答3:


Ceil will do that for you

Taken from the example:

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



回答4:


I know this question has long since been answered, but it came up when I did a google search on the topic. If you want to round up with precision, then a good method would be to use the ceil function and times the number by how many decimal points you want to represent and then divide by that number.

ceil(1024.321*100)/100

would produce 1024.33




回答5:


I like Ash's response, although I would have:

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

Makes sense that if I provide precision '2', I would expect it rounded to 2 decimal places. Matter of choice though I suppose. Thanks for the answer Ash, works well.



来源:https://stackoverflow.com/questions/5093608/how-can-i-make-sure-a-float-will-always-be-rounded-up-with-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!