四舍五入到PHP中最接近的50美分

rkue9o1l  于 2023-06-28  发布在  PHP
关注(0)|答案(4)|浏览(184)

有许多PHP解决方案在线四舍五入到最近的50美分,但是,我感兴趣的是四舍五入到最近的50美分。因此,如何调整以下代码以向上舍入到最接近的50美分?

add_filter('australia_post_shipping_rate', 'shipping_round_to_nearest_50cents');

function shipping_round_to_nearest_50cents($price) {
    if(is_int($price)){
        return $price;
    }
    $payprice = round($price * 2, 0)/2;
    return $payprice;
}
5w9g7ksd

5w9g7ksd1#

你可以使用我在ceil PHP documentation中找到的这个函数。如果在本例中传递了1.26,则将返回值1.5。

if( !function_exists('ceiling') )
{
    function ceiling($number, $significance = 1)
    {
        return ( is_numeric($number) && is_numeric($significance) ) ? (ceil($number/$significance)*$significance) : false;
    }
}

echo ceiling(1.26, 0.5); // 1.5
owfi6suc

owfi6suc2#

不幸的是,使用PHP的内置函数似乎没有任何简单的方法来做到这一点。下面是一个简单的函数,它可以做到这一点:

function roundUp50($n) {
    $whole = (int) floor($n);
    $frac = $n - $whole;
    if( $frac >= 0.5 ) {
        $whole += 1;
        $frac = 0.0;
    } else {
        $frac = 0.5;
    }
    return $whole + $frac;
};

************************像2.49这样的数字将四舍五入到2.5,但2.4999999999999将四舍五入到3(这样的重复数字可以通过数学证明等于下面的数字)。

9nvpjoqh

9nvpjoqh3#

下面是一行代码:

$price = ceil($price + 0.5) > ceil($price) ? ceil($price) : intval($price) + 0.5;
exdqitrt

exdqitrt4#

您可以执行以下操作:

$price = ceil($price / 0.5) * 0.5;

示例:

26.42 => ceil(26.42 / 0.5) = 53 * 0.5 = 26.50
26.52 => ceil(26.52 / 0.5) = 54 * 0.5 = 27.00
26.00 => ceil(26.00 / 0.5) = 52 * 0.5 = 26.00

相关问题