2017-05-12 14 views
1

我有一個非常簡單的PHP問題,但我不知道如何做到這一點。在PHP中循環到最多一千,百等

根據數據庫返回的值,我想四捨五入到最大的一百或幾千。

這裏是什麼,我需要的幾個例子:

  • DB返回值11,我想PHP輸出20
  • DB返回值104,我想PHP輸出200
  • DB返回值1404,我想PHP來輸出2000
  • DB返回值10241,我想PHP輸出11000

等等等等

我想創建一個自動函數來做到這一點,根據傳遞的值。

謝謝!

+0

請看看接受的答案,也許這是你的解決方案: http://stackoverflow.com/questions/5150001/how-to-round-to-nearest-thousand –

+0

DB返回值10241,我想讓PHP輸出11000那不是20000? –

+0

http://stackoverflow.com/q/1619265/6521116 –

回答

3

最終實現,靈感來自Shaunkak's answer和SO的評論。感謝這些胸罩。 live demo

<?php 
    $val = 10241.67; 
    if($val >= 1000) { 
    echo ceil($val/1000) * 1000; 
    } 
    else { 
    $length = strlen(ceil($val)); 
    $times = str_pad('1', $length, "0"); 
    echo ceil($val/$times) * $times; 
} 
+0

你測試過了嗎? ceil(11/1000.0)* 1000 => 1000,而不是20. –

+0

@LeszekRepie https://eval.in/792817 –

+0

我的意思是如果你想要10個文件夾,除以10.0然後乘以10。 –

0

試試這個

<?php 
    $input = 10241; //this will be your input 
    $charLength = strlen($input); 
    $number = [1,10,100,1000,10000,100000]; 
    $output = ceil($input/$number[$charLength - 1]) * $number[$charLength - 1]; //same like this ceil($input/10) * 10; 
?> 
2
<?php 
$value = 14; 
$len = strlen($value); 
$div = str_pad('1', $len, "0"); 
echo ceil($value/$div) * $div; 
?> 
+1

upvote + 1 for str_pad。 –

+1

謝謝!其實,我有想法把它放在你以前的答案上。 –

1

這裏是我的2美分:

$v = 11; 

if(strlen($v)<4) { 
    $v = str_pad((int)(substr($v, 0, 1)+1), strlen($v), 0, STR_PAD_RIGHT); 
} else { 
    $v = substr($v, 0, -4) . str_pad((int)(substr($v, -4, -3)+1), 4, 0, STR_PAD_RIGHT); 
}