四舍五入到下一个重要人物

时间:2012-04-03 09:18:46

标签: php

我需要将php中1和无穷大之间的任何整数四舍五入到下一个有效数字(虽然在实践中我不太可能需要对无穷大进行舍入,因此很乐意确定合理的内部限制)例如:< / p>

$x <= 10 ? $x = 10 
10 < $x <= 100 ? $x = 100  
100 < $x <= 1000 ? $x = 1000  

Round / ceil等似乎没有按计划完成这项工作。指向正确的algorhythm(或函数?)的指针将非常感激

6 个答案:

答案 0 :(得分:4)

我认为这种方法可以解决您的问题:

function n($nr, $p = 10) {
    if($nr <= $p) {
        return $p;
    }

    return n($nr, $p*10);
}

继承人的结果:

echo n(1);
//output 10

echo n(232);
//output 1000

echo n(89289382);
//output 100000000

答案 1 :(得分:2)

$x = pow(10,floor(log10($x)) + (floor(log10($x)) == log10($x) && $x!=1 ? 0:1) );

答案 2 :(得分:1)

我认为这就是你要找的东西:

echo ceil($x / pow(10, strlen($x))) * pow(10, strlen($x));

仅在$x为整数时才有效,但您在问题中确实说的确如此,所以没有问题(除非您稍后尝试将其与包含小数的数字一起使用)。

答案 3 :(得分:1)

function my_ceil($in) {
        if($in == 1) return $in;
        if($in == pow(10, strlen($in)-1)) return $in;
        return pow(10, strlen($in));
}

echo my_ceil(11); //100
echo my_ceil(10); //10

答案 4 :(得分:1)

这应该可以解决问题:

<?php
function nextSignificantFeature($number){
    $upper = pow(10, strlen($number));
    return $number == $upper/10 ? $number : $upper;
}
?>

答案 5 :(得分:1)

实际上PHP中存在无穷大数字,因此当您编写从1到无穷大Demo的任何数字时,实现应该处理它:

<?php

function n($number) {
    if ($number < 1) {
        throw new InvalidArgumentException('Number must be greater or equal 1.');
    }
    if ($number === INF) {
        return INF;
    }

    $p = 10;
    while($number > ($p*=10));
    return $p;
}

echo n(1), "\n";
//output 10

echo n(232), "\n";
//output 1000

echo n(89289382), "\n";
//output 100000000

echo n(INF), "\n";
// output INF

echo n(-INF), "\n";
// throws exception 'InvalidArgumentException' with message 'Number must be greater or equal 1.'

此示例在PHP userland代码中执行迭代计算。 PHP中有一些数学函数可以像pow一样内联。