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

时间:2012-06-08 13:19:05

标签: php excel rounding

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

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

PHP的等效功能是什么?

如果没有,你会怎么做?

3 个答案:

答案 0 :(得分:4)

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()

答案 1 :(得分:2)

你可以通过除以分母,四舍五入然后再乘以分母来达到同样的效果。例如:

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

答案 2 :(得分:1)

基本逻辑是:

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

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

相关问题