如何在PHP中舍入十进制数

时间:2014-11-04 09:07:58

标签: php

我想要达到的目标是:

10678.62 then round to 10679 <br/>
10678.67 then round to 10679 <br/>
10678.46 then round to 10678.5 <br/>
10678.43 then 10678.43

我可以使用什么PHP函数让它像上面的例子一样工作?因为据我所知(圆形,天花板等),必须设置逗号后面有多少数字。

逻辑

if .x1 x2 x3 xn (x1 is first number behind comma and so on)
if x1 >= 5 then round to integer (ex: 10678.62 then result 10679)
if x1 < 5 and x2 >=5 then x1 + 1 (ex: 10678.46 then result 10678.5)
if x1 < 5 and xz < 5 then nothing rounded 9 (ex 10678.43 then 10678.43)

基本上我们必须看看x1 >= 5然后是舍入整数但如果x1 < 5检查下一个数字x2 >= 5然后舍入到数字后面的数字,如果没有则然后舍入到逗号后面的两个数字< / p>

任何解决方案都将非常感激。 问候

2 个答案:

答案 0 :(得分:0)

你只需说出需要多少位数:

$number = 10678.48;
$pos = strpos($number, '.');
$len = strlen($number);
$digits = substr($number, $pos+1, $len-$pos);
if($digits<50){
    echo round($number,1);
}else{
    echo round($number,0);
}

答案 1 :(得分:0)

如果我理解你的问题,这应该适合你:

function formatRound($number) {
    $decimal = (string) fmod($number, 1);

    if ($decimal[2] >= 5) {
        return round($number);
    }

    if ($decimal[2] < 5 && $decimal[3] >= 5) {
        return round($number, 1);
    }

    if ($decimal[2] < 5 && $decimal[3] < 5) {
        return $number;
    }
}

var_dump(formatRound(10678.62));
var_dump(formatRound(10678.67));
var_dump(formatRound(10678.46));
var_dump(formatRound(10678.43));