网上有很多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;
}
答案 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;