1

小さなパーセンテージを大きな分数に変える必要があります。0.000126%のパーセンテージがある場合-これを1 / 10,000のような分数に入れたい-など。どのように、小さなパーセンテージを最低の一般的な分数ではない分数に変換しますか。

方程式の答えは簡単です。

0.000126% = 0.00126/10% = 0.0126/100% = 0.126/1000% = ... = 126/1000000%

次に、一般的な要因を見つけます。それぞれに2が入るので、 63/500000と同じです。それは私ができる限り簡単です。

したがって、コードでは、どうすればこの気の利いた分数を取得できますか。Grrrr ....イライラするoO!いくつかの試み-そして私はそれぞれで失敗しています。何か案は?

4

1 に答える 1

2

これは、連分数を使用して、特定の許容誤差よりも小さい相対誤差を持つ特定の(正の)浮動小数点数の有理数近似を見つけるPHP関数です。

<?php
function float2frac($n, $tolerance = 1.e-6) {
    $h1=1; $h2=0;
    $k1=0; $k2=1;
    $b = $n;
    do {
        $a = floor($b);
        $aux = $h1; $h1 = $a*$h1+$h2; $h2 = $aux;
        $aux = $k1; $k1 = $a*$k1+$k2; $k2 = $aux;
        $b = 1/($b-$a);
    } while (abs($n-$h1/$k1) > $n*$tolerance);

    return "$h1/$k1";
}

printf("%s\n", float2rat(66.66667)); # 200/3
printf("%s\n", float2rat(sqrt(2)));  # 1393/985

このアルゴリズムとその機能について詳しく説明しました。JavaScriptのデモもここにあります:http://jonisalonen.com/2012/converting-decimal-numbers-to-ratios/

于 2013-02-16T11:56:35.660 に答える