1
function gcd(a, b) {
    return (b) ? gcd(b, a % b) : a;
}
var dec2Frac = function (d) {
    var top = d.toString().replace(/\d+[.]/, '');
    var bot = Math.pow(10, top.length);
    if (d > 1) {
        top = +top + Math.floor(d) * bot;
    }
    var x = gcd(top, bot);
    var r1 = top / x;
    var r2 = bot / x;
    var frac =  r1 + "/" + r2;
    var parts = frac.split('/');
    var simpler = parts[0][0]+'/'+parts[1][0];
    return simpler;
};

640x960=を入力すると0.66666666666667

私は結果が2/3ここで明らかであることを期待しています: http://www.mindspring.com/~alanh/fracs.html

代わりに、この関数は を返します6/1。ここでテスト: http://jsbin.com/asoxud/1/

4

2 に答える 2

0

浮動小数点数は、希望する有理数の近似値です。たとえば、浮動小数点演算は壊れていますか?を参照してください。詳細については。つまり、元の分数を表す分子と分母を実際に見つけることは期待できません。

その分数が必要な場合は、連分数を確認する必要があります。切り捨てられた各連分数は、任意の値の可能な限り最良の有理近似を表します。エラーが十分に小さくなるまで、これを続けることができます。

これは、この近似を視覚化したページです。テキストはドイツ語ですが、数学は十分に明確である必要があります。このページは英語ですが、あまり視覚化されていません。

于 2013-05-02T13:20:38.247 に答える