PHP的floor()
和ceil()
對於將浮線四捨五入到最近的整數很有用。以可變比例舍入最高因子?
但是,如果我們需要找到給定數量的最高倍數(數百,數千等)呢?例如:
num_to_scale(538.9) // 500
num_to_scale(543123654.) // 5000000
PHP的floor()
和ceil()
對於將浮線四捨五入到最近的整數很有用。以可變比例舍入最高因子?
但是,如果我們需要找到給定數量的最高倍數(數百,數千等)呢?例如:
num_to_scale(538.9) // 500
num_to_scale(543123654.) // 5000000
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.
試試這個:
function num_to_scale($number) {
$num = (int) floor($number);
$ln = strlen($num) - 1;
return (int) floor($num/pow(10, $ln)) * pow(10, $ln);
}
我的回答以對數:
function num_to_scale($var) {
$nbDigits = (int)log($var,10);
return (int)($var/10**$nbDigits)*10**$nbDigits;
}
參閱本[文章](https://stackoverflow.com/a/43932669/6521116) –