30

などの小数入力文字列を取り、それを文字列または数値'3/2'として 10 進数に変換できる JavaScript 関数を作成しようとしています。'1.5'1.5

function ratio(fraction) {
    var fraction = (fraction !== undefined) ? fraction : '1/1',
    decimal = ??????????;
    return decimal;
});

これを行う方法はありますか?

4

17 に答える 17

51

まだ誰も言及していないので、手早く汚い解決策があります:

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

ここの人々は、生の評価を使用することの危険性についてすぐに言及しますが、怠け者の答えとしてこれを提出します。

于 2011-08-22T02:49:09.243 に答える
22

これを行うために必要な最低限のコードは次のとおりです。

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/

考慮事項:

  • ゼロ除算
  • ユーザーが分数ではなく整数を指定した場合、またはその他の無効な入力があった場合
  • 丸めの問題 (たとえば 1/3 など)
于 2011-08-22T02:42:39.233 に答える
6

このようなもの:

bits = fraction.split("/");
return parseInt(bits[0],10)/parseInt(bits[1],10);
于 2011-08-22T02:40:58.527 に答える
6

私はそれを行うための素晴らしい関数を作成しました。すべてはこの質問と回答に基づいていましたが、文字列を取得して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"));
于 2013-10-14T16:14:47.190 に答える
4

整数、帯分数 (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"です。

于 2015-03-20T16:11:45.317 に答える
0

分数を小数に変換するには、一番上の数字を一番下の数字で割ります。5 を 3 で割ると、5/3 または 1.67 になります。よく似ています:

function decimal(top,bottom) {
    return (top/bottom)
}

これが役立つことを願っています、ハハ

于 2013-02-20T00:28:14.900 に答える
0

eval()また、パーティーには少し遅れていますが、 (少なくとも MDN によると) セキュリティの問題が少ない代替手段はFunction()factory です。

var fraction = "3/2";
console.log( Function("return (" + fraction + ");")() );

これにより、コンソールに結果「1.5」が出力されます。

また、補足として: 1 1/2 のような混合分数は、両方ともスペースにつまずくため、書かれているようにどちらeval()でも機能しません。Function()

于 2018-07-25T21:40:34.553 に答える
0

文字列から答えを得るだけでなく、結果を分数として使用したい場合は、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"
于 2015-06-04T11:31:34.117 に答える