3

10 進数がない場合は 0. を先頭に追加します。

私は持っている:

function toDecimal($input){
    return (stripos($input, ".")!==false)? $input: "0." . $input;
}

これは私の以前の質問で提供されました(@shiplu.mokad.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 に答える