四舍五入到具有可变比例的最高因子?
Round to Highest Factor with Variable Scale?
PHP 的 floor()
和 ceil()
对于将浮点数四舍五入到最接近的整数很有用。
但是,如果我们需要找到给定数字的 10 的最大倍数(数百、数千等)怎么办?例如:
num_to_scale(538.9) // 500
num_to_scale(543123654.01234) // 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);
}
尝试此代码,检查 live demo. You also can refer to this 。
$floor = floor($v);
return str_pad(substr($floor, 0, 1), strlen($floor), '0');
我的答案使用对数:
function num_to_scale($var) {
$nbDigits = (int)log($var,10);
return (int)($var/10**$nbDigits)*10**$nbDigits;
}
PHP 的 floor()
和 ceil()
对于将浮点数四舍五入到最接近的整数很有用。
但是,如果我们需要找到给定数字的 10 的最大倍数(数百、数千等)怎么办?例如:
num_to_scale(538.9) // 500
num_to_scale(543123654.01234) // 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);
}
尝试此代码,检查 live demo. You also can refer to this
$floor = floor($v);
return str_pad(substr($floor, 0, 1), strlen($floor), '0');
我的答案使用对数:
function num_to_scale($var) {
$nbDigits = (int)log($var,10);
return (int)($var/10**$nbDigits)*10**$nbDigits;
}