2016-01-22 38 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