我需要将php中1和无穷大之间的任何整数四舍五入到下一个有效数字(虽然在实践中我不太可能需要对无穷大进行舍入,因此很乐意确定合理的内部限制)例如:< / p>
$x <= 10 ? $x = 10
10 < $x <= 100 ? $x = 100
100 < $x <= 1000 ? $x = 1000
等
Round / ceil等似乎没有按计划完成这项工作。指向正确的algorhythm(或函数?)的指针将非常感激
答案 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
一样内联。