我需要PHP中的一个函数将小数移动到数字的开头(如果存在的话,否则如果没有小数加0到开头。
我有:
function toDecimal($input){
return (stripos($input, ".")!==false)? $input: "0." . $input;
}
在我之前的一个问题中提供过(感谢@ shiplu.mokadd.im),但是我需要扩展它以将小数移动到开头,如:
Input Output
0.1234 0.1234
1.2345 0.12345
1234 0.1234
0.001234 0.001234
所以基本上输出的数字永远不会大于1.
谢谢!
答案 0 :(得分:2)
一个小的递归魔法应该可以解决这个问题:
function divideNumber($number, $divide_by, $max)
{
if($number > $max)
{
return divideNumber($number/$divide_by, $divide_by, $max);
}
else
{
return $number;
}
}
// Outputs 0.950
print(divideNumber(950, 10, 1));
修改强>
这是一个循环版本(递归是我想到的第一件事):
function divideNumber($number, $divide_by, $max)
{
while($number > $max)
{
$number = $number / $divide_by;
}
return $number;
}
答案 1 :(得分:2)
有一种更好的方法。使用一些数学属性 - 这样的事情(这也会使前面的数字小于0.1;你没有说明我们应该怎么做,比如0.001234 - 如果你想单独留下小于0.1的数字,只需添加一个分支)< / p>
function foo($num) {
if ($num == 0) return $num; // can't take log of 0
return $num / pow(10, ceil(log($num, 10)));
}
echo foo(10.23);