PHP相当于Excel的MROUND函数,四舍五入到最接近的倍数


PHP's equivalent to Excel's MROUND function, rounding to nearest multiple

Excel具有MROUND函数,可将数字向上/向下舍入到给定的倍数。

=MROUND(600, 400) //--> 800
=MROUND(14,4)     //--> 16
=MROUND(0.5,2)    //--> 0

PHP 的等效函数是什么?

如果没有,你会怎么做?

您可以通过除

以分母,四舍五入,然后再次乘以分母来达到相同的效果。例如:

function roundTo($number, $to)
{
    return round($number/$to, 0)* $to;
}
echo roundTo(87.23, 20); //80
echo roundTo(600, 400) // 800
echo roundTo(14,4)     // 16
echo roundTo(0.5,2)    // 0

MROUND() 的 PHPExcel 实现

function MROUND($number,$multiple) {
    if ((is_numeric($number)) && (is_numeric($multiple))) {
        if ($multiple == 0) {
            return 0;
        }
        if ((SIGNTest($number)) == (SIGNTest($multiple))) {
            $multiplier = 1 / $multiple;
            return round($number * $multiplier) / $multiplier;
        }
        return 'NAN';
    }
    return 'NAN';
}   //  function MROUND()
function SIGNTest($number) {
    if (is_bool($number))
        return (int) $number;
    if (is_numeric($number)) {
        if ($number == 0.0) {
            return 0;
        }
        return $number / abs($number);
    }
    return 'NAN';
}   //  function SIGN()

基本逻辑是这样的:

$number= 600;
$unit= 400;
$remainder= $number % unit;
$mround = ($remainder < $unit/2) ? $number - $remainder : $number + ($unit-$remainder);

您需要验证输入以确保它们是数字并避免除以零。