汇总数字

时间:2016-01-22 09:30:35

标签: php

我从数据库中获取了一些数字。我希望用这种方式对这些数字进行舍入:

Database => Round up number
34 => 0
89 => 100
421 => 400
561 => 600
4421 => 4000
6701 => 7000
45000 => 50000
91000 => 90000
132000 => 130000

有没有PHP功能呢?因此,1000以下的数字将向上舍入到最接近满100的数字。超过数千将被四舍五入到最接近的完整1000数字。如果数字超过10 000,那么它总是四舍五入到最接近的满10 000。

希望你能理解我所追求的目标。

5 个答案:

答案 0 :(得分:1)

您可以使用一些简单的数学运算(主要是计算钙值)并使用负精度round()函数进行内置

 function customRound($number) {
    return round($number,  -floor(log10($number)));
 }

 echo customRound(6701); // sample of usage

-floor(log10($number))这部分是为了计算num - 1的长度,并且对于round()需要也是否定

答案 1 :(得分:1)

因为我厌倦了人们没有读那该死的问题 ......

function myRound(int $number) : int {
    // remove typehints if you're on old versions of PHP...
    $magnitude = abs($number);
    if( $magnitude < 1000) $precision = -2;
    elseif( $magnitude < 10000) $precision = -3;
    else $precision = -4;

    return round($number,$precision);
}

IDEOne test

答案 2 :(得分:0)

在这里查看round()功能

http://php.net/manual/en/function.round.php

和此处的ceil()功能

http://php.net/manual/en/function.ceil.php

这样的东西
$number = 1;
$number = ceil($number / 10) * 10;

echo $number; 

答案 3 :(得分:0)

您可以使用以下功能:

$number = 45000;

function rounder($num) 
{
    $length = strlen($num);
    if(is_int($num))
    {
        if($num < 100)
            return round($num, -($length));
        elseif($num < 1000  || $num <= 9999)
            return round($num, -($length-1));
        else
            return round($num, -4);
    }
}

echo rounder($number);

虽然没经过测试,但应该有效..

答案 4 :(得分:0)

这是一个解决方案:

$numbers = [
    34,
    89,
    421,
    561,
    4421,
    6701,
    45000,
    91000,
    132000
];

foreach ($numbers as $number) {
    $len = strlen((string)$number);
    $precision = $len - 1;
    $precision = $len <= 2 ? 2 : $precision;
    $precision = $len > 4 ? 4 : $precision;
    echo $number . ' => '. round($number, -1 * $precision) . PHP_EOL;
}

输出:

34 => 0
89 => 100
421 => 400
561 => 600
4421 => 4000
6701 => 7000
45000 => 50000
91000 => 90000
132000 => 130000