我希望3000
代表所有这些数字:
3001 - 3500 - 3999
我希望40000
代表所有这些数字:
40000.3 - 40101 - 48000.8 - 49901
我希望20
代表所有这些数字:
21 - 25.2 - 29
有两个PHP函数来围绕(floor和round)进行数字排列但是没有don't act exactly what I need。
注意:我不知道我的号码包含多少位数。如果它正在发生变化。
有没有办法做到这一点?
答案 0 :(得分:4)
如何实现这一点有很多方法。一个是这个:
<?php
echo roundNumber( 29 )."<br>";
echo roundNumber( 590 )."<br>";
echo roundNumber( 3670 )."<br>";
echo roundNumber( 49589 )."<br>";
function roundNumber( $number )
{
$digitCount = floor( log10( $number ) ) ;
$base10 = pow( 10, $digitCount );
return floor( $number / $base10 ) * $base10;
}
?>
输出是这样的:
20
500
3000
40000
答案 1 :(得分:1)
这对任何不适用。的数字。试试这个:
$input = 25.45;
if (strpos($input, ".") !== FALSE) {
$num = explode('.', $input);
$len = strlen($num[0]);
$input = $num[0];
} else {
$len = strlen($input);
}
$nearest_zeroes = str_repeat("0", $len-1);
$nearest_round = '1'.$nearest_zeroes;
echo floor($input/$nearest_round) * $nearest_round;
这个想法是当你围绕一个4位数字,比如3999时,$ nearest_round应该是1000。
对于39990(5位数),$ nearest_round = 10000。
25(2位),$ nearest_round = 10。
等等。
所以,我们的想法是根据no动态生成$ nearest_round。 $ input的数字。
希望这有帮助。
答案 2 :(得分:1)
PHP允许圆形的负精度,例如:
round(3993,-3);
输出:3000
n round(1111.1111,n)
== ==================
3 1111.111
2 1111.11
1 1111.1
0 1111
-1 1110
-2 1100
-3 1000