如何进行数字轮?

时间:2016-04-10 13:35:22

标签: php regex numbers

我希望3000代表所有这些数字:

3001 - 3500 - 3999

我希望40000代表所有这些数字:

40000.3 - 40101 - 48000.8 - 49901

我希望20代表所有这些数字:

21 - 25.2 - 29

有两个PHP函数来围绕floorround进行数字排列但是没有don't act exactly what I need

注意:我不知道我的号码包含多少位数。如果它正在发生变化。

有没有办法做到这一点?

3 个答案:

答案 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

W3S about round