などの小数入力文字列を取り、それを文字列または数値'3/2'として 10 進数に変換できる JavaScript 関数を作成しようとしています。'1.5'1.5
function ratio(fraction) {
var fraction = (fraction !== undefined) ? fraction : '1/1',
decimal = ??????????;
return decimal;
});
これを行う方法はありますか?
などの小数入力文字列を取り、それを文字列または数値'3/2'として 10 進数に変換できる JavaScript 関数を作成しようとしています。'1.5'1.5
function ratio(fraction) {
var fraction = (fraction !== undefined) ? fraction : '1/1',
decimal = ??????????;
return decimal;
});
これを行う方法はありますか?
まだ誰も言及していないので、手早く汚い解決策があります:
var decimal = eval(fraction);
これには、あらゆる種類の数学的文字列を正しく評価できるという利点があります。
eval("3/2") // 1.5
eval("6") // 6
eval("6.5/.5") // 13, works with decimals (floats)
eval("12 + 3") // 15, you can add subtract and multiply too
ここの人々は、生の評価を使用することの危険性についてすぐに言及しますが、怠け者の答えとしてこれを提出します。
これを行うために必要な最低限のコードは次のとおりです。
var a = "3/2";
var split = a.split('/');
var result = parseInt(split[0], 10) / parseInt(split[1], 10);
alert(result); // alerts 1.5
JsFiddle: http://jsfiddle.net/XS4VE/
考慮事項:
このようなもの:
bits = fraction.split("/");
return parseInt(bits[0],10)/parseInt(bits[1],10);
私はそれを行うための素晴らしい関数を作成しました。すべてはこの質問と回答に基づいていましたが、文字列を取得して10進数値を出力しますが、エラーなしで整数も出力します
https://gist.github.com/drifterz28/6971440
function toDeci(fraction) {
fraction = fraction.toString();
var result,wholeNum=0, frac, deci=0;
if(fraction.search('/') >=0){
if(fraction.search('-') >=0){
wholeNum = fraction.split('-');
frac = wholeNum[1];
wholeNum = parseInt(wholeNum,10);
}else{
frac = fraction;
}
if(fraction.search('/') >=0){
frac = frac.split('/');
deci = parseInt(frac[0], 10) / parseInt(frac[1], 10);
}
result = wholeNum+deci;
}else{
result = fraction
}
return result;
}
/* Testing values / examples */
console.log('1 ',toDeci("1-7/16"));
console.log('2 ',toDeci("5/8"));
console.log('3 ',toDeci("3-3/16"));
console.log('4 ',toDeci("12"));
console.log('5 ',toDeci("12.2"));
整数、帯分数 (Unicode 下品な分数文字を含む)、および小数を処理するために使用する関数があります。おそらく多少の研磨が必要ですが、私の目的(レシピ成分リストの解析)には適しています。
入力"2 1/2"、"2½"、"2 ½"、および"2.5"はすべて を返し2.5ます。例:
var numQty = require("numeric-quantity");
numQty("1 1/4") === 1.25; // true
numQty("3 / 4") === 0.75; // true
numQty("¼" ) === 0.25; // true
numQty("2½") === 2.5; // true
numQty("¾") === 0.75; // true
numQty("⅓") === 0.333; // true
numQty("⅔") === 0.667; // true
処理しないことの 1 つは、分数内の小数"2.5 / 5"です。
分数を小数に変換するには、一番上の数字を一番下の数字で割ります。5 を 3 で割ると、5/3 または 1.67 になります。よく似ています:
function decimal(top,bottom) {
return (top/bottom)
}
これが役立つことを願っています、ハハ
eval()また、パーティーには少し遅れていますが、 (少なくとも MDN によると) セキュリティの問題が少ない代替手段はFunction()factory です。
var fraction = "3/2";
console.log( Function("return (" + fraction + ");")() );
これにより、コンソールに結果「1.5」が出力されます。
また、補足として: 1 1/2 のような混合分数は、両方ともスペースにつまずくため、書かれているようにどちらeval()でも機能しません。Function()
文字列から答えを得るだけでなく、結果を分数として使用したい場合は、https://github.com/infusion/Fraction.jsのようなライブラリが非常にうまく機能します。
var f = new Fraction("3/2");
console.log(f.toString()); // Returns string "1.5"
console.log(f.valueOf()); // Returns number 1.5
var g = new Fraction(6.5).div(.5);
console.log(f.toString()); // Returns string "13"