7

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

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

PHP的等效函数是什么?

如果没有,你会怎么做?

4

3 回答 3

8

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

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
于 2018-02-06T12:33:55.937 回答
6

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()
于 2012-06-08T13:25:23.303 回答
1

基本逻辑是这样的:

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

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

于 2012-06-08T13:28:48.543 回答