FloatToFraction (JavaScript版)

使用方法や処理内容などの解説はこちらに書いています

複数回使用したい場合はページを再読み込み(F5)してください。

ただしあまり頻繁に(高速で)再読み込みしまくるのはサーバーに負荷がかかるかもしれないので避けてください。

以下はJavaScript版ソースコードです(適当に流用するなり自由に使ってもらって構いません)。

(function(){

// ユーザーによるパラメータの入力
var f = +prompt("変換したい値 =", "21.333333333333");
var maxDenominator = +prompt("分母の上限 =", "10000");
var errorCapacity = +prompt("誤差の許容範囲 =   (絶対値)", "0.000001");

// 分母 i を変えながら、f に近い分数を探していく
for(var i=1; i<maxDenominator; i++) {
    
    // 分母 i のとき、分数の値が f に最も近くなり得る分子
    var j1 = (f*i)|0;     // f より小さい側
    var j2 = j1 + 1;      // f より大きい側
    
    // 分数の浮動小数点数による近似値を計算
    var v1 = j1 / i;  // f より小さい側
    var v2 = j2 / i;  // f より大きい側
    
    // 誤差が許容範囲内であれば、結果に i/j を出力して終了
    if (Math.abs(v1-f) < errorCapacity) {
        alert("結果 = " + j1 + " / " + i + " ( = " + v1 + " )");
        return;
    } else if (Math.abs(v2-f) < errorCapacity) {
        alert("結果 = " + j2 + " / " + i + " ( = " + v2 + " )");
        return;
    }
}

// 結果があれば既にexitしているはずなので、ここが実行される場合は結果なし
alert("結果 = 該当なし");
return;

})();