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 回答