2016-01-22 53 views
-5

我从数据库中获得一些数字。我想围捕这些数字是这样的:收集数字

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.

希望你明白我在做什么。

+2

你已经看过PHP的'round()'函数,并且看到它有一个'precision'参数? –

+1

我假设你已经看过手册,对吗?具体来说,这个例子直接来自手册:'echo round(1241757,-3); // 1242000' – Simba

+0

要添加,“精度”参数将需要随输入大小而变化。就像'if($ number <1000)$ precision = -2; elseif($ number <10000)$ precision = -3;否则$ precision = -4;' –

回答

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; 
+0

你会如何在这里使用这些功能? –

+0

示例代码不像OP所要求的那样接近工作。它把'89'变成'90',而不是请求的'100'。 –

+0

问题是“在PHP中有没有函数”,答案是肯定的 –

1

你可以使用一些简单的数学(主要是钙NUM长度)和负精密round()功能建立在

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

echo customRound(6701); // sample of usage 

-floor(log10($number))这部分是calc下NUM的长度 - 1,也被否定了一轮()的需求

+0

这轮'132000'到'100000',而不是'130000' OP要求。 –

+0

现在呢,我已经纠正了它 – Robert

+0

[Nope](http://prntscr.com/9tajph)。 –

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

+1

我很想听听为什么这是downvoted。前进。招待我:) –

+1

IDK,但我猜测的是偏离主题的态度。对不起,娱乐价值低,大声笑 – Michael

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

虽然没有测试过,应该工作..

+0

这需要'89'并给出'90',而不是'100' OP所要求的。 –

+0

不是。 '132000'轮到'100000',而不是请求的'130000'。 –

+0

@NiettheDarkAbsol这应该现在工作 –

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