php 四舍五入到`.49`或`.99`

yrdbyhpb  于 2023-03-28  发布在  PHP
关注(0)|答案(5)|浏览(113)

我试着把数字四舍五入像这样:

5,24785 => 5,49
5,74536 => 5,99
5,00000 => 5,00

我试着用https://php.net/round
但这次回归

5,24785 => 5,24
5,74536 => 5,74
5,00000 => 5,00

一个php函数可以做到这一点,或者我需要四舍五入,然后删除0.01?
你有什么线索吗

w80xi6nr

w80xi6nr1#

你需要使用自定义的舍入函数。因为舍入到0.49不是标准的方法。

function rounder($num){
    $fln= $num-floor($num);
    if ($fln>0 and $fln<0.5) $fln=0.49;
    else $fln=0.99;

    return floor($num)+$fln;
    }
    echo rounder(5.24882);
vql8enpb

vql8enpb2#

在php中没有这样的东西(我相信),你可以做一个手工检查:

$number = "5.85458";
$decimal = $number - (int) $number;

if($decimal > 0 && $decimal < 0.5) $myNumber = (int) $number + 0.49; // x.49
if($decimal > 0.5) $myNumber = (int) $number + 0.99; // x.99
if($decimal == 0) $myNumber = (int) $number; // x.00

echo $myNumber;

或者只去掉0.01

tuwxkamq

tuwxkamq3#

没有函数可以做到的,需要四舍五入然后去掉0.01

bvhaajcl

bvhaajcl4#

$num = 5.56;  
$num = round($num - (int) $num) ? round($num) - 0.01 : round($num) + .49;
// 5.99 output

$num = 5.38;  
$num = round($num - (int) $num) ? round($num) - 0.01 : round($num) + .49;
// 5.49 output
41zrol4v

41zrol4v5#

我修改了**@GummaMocciaro**解决方案,它为我完成了这项工作。但我稍微扩展了这段代码,因为没有处理x.5的情况,返回null。
我将其转换为else-if语句,并在else块中分配$myNumber = $number,这是x.0x.5的情况,因此总是返回一个有效的数字。

function roundPrice($number) {
    $decimal = $number - (int)$number;
    $myNumber = $number;

    // x.49
    if ($decimal > 0 && $decimal < 0.5) {
        $myNumber = (int)$number + 0.49;
    } 
    // x.99
    else if ($decimal > 0.5) {
        $myNumber = (int)$number + 0.99;
    }
    // else x.0 or x.5

    return $myNumber;
}

相关问题