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;
})();