2017-06-06 68 views
1

PHP的floor()ceil()對於將浮線四捨五入到最近的整數很有用。以可變比例舍入最高因子?

但是,如果我們需要找到給定數量的最高倍數(數百,數千等)呢?例如:

num_to_scale(538.9)   // 500 
num_to_scale(543123654.) // 5000000 
+0

參閱本[文章](https://stackoverflow.com/a/43932669/6521116) –

回答

0

嘗試這個代碼,檢查live demo。你也可以參考這個post

$floor = floor($v); 
    return str_pad(substr($floor, 0, 1), strlen($floor), '0'); 
0
function num_to_scale($number) { 
    $multiple=1; $test=1; 
    for ($i=1; $test>=1; $i++) { 
    $factor = $multiple/10; 
    $test = $number/$multiple; 
    $multiple = $multiple*10; 
    $scale = floor($number/$factor)*$factor; 
    } return $scale; 
} 

或者更簡單地說:

function num_to_scale($n) { 
    $m=1; $t=1; 
    for ($i=1; $t>=1; $i++) { 
    $f=$m/10; $t=$n/$m; $m=$m*10; $s=floor($n/$f)*$f; 
    } return $s; 
} 

與助手功能convert integers to text strings相結合,我們可以很容易地做這樣的事情:

echo 'Over '.num_to_scale(5395206).' units sold.'; 
// Over five million units sold. 
0

試試這個:

function num_to_scale($number) { 
    $num = (int) floor($number); 
    $ln = strlen($num) - 1; 

    return (int) floor($num/pow(10, $ln)) * pow(10, $ln); 
} 
0

我的回答以對數:

function num_to_scale($var) { 
    $nbDigits = (int)log($var,10); 
    return (int)($var/10**$nbDigits)*10**$nbDigits; 
}