3

我需要 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。

谢谢!

4

2 回答 2

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;
}
于 2013-01-27T01:12:24.330 回答
2

有更好的方法。使用一些数学属性 - 类似这样的东西(这也会带来小于 0.1 的数字;你没有指定我们应该用 0.001234 做什么——如果你想单独留下小于 0.1 的数字,只需添加一个分支)

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);
于 2013-01-27T01:26:05.713 回答