在PHP中最接近50美分

时间:2018-03-25 14:19:28

标签: php wordpress woocommerce rounding

网上有很多PHP解决方案,最接近50美分,但是,我有兴趣将 UP 四舍五入到最接近的50美分。那么如何调整以下代码以将UP向上舍入到最接近的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;
}

3 个答案:

答案 0 :(得分:1)

您可以使用我在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

答案 1 :(得分:0)

不幸的是,使用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.499999999999999将舍入到3(这样的重复数字可以通过数学证明等于以下数字)。

答案 2 :(得分:0)

这是一个单行:

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