1

"1 1/2"print x (where x = "1 1/2") と言うと が返されるように、JavaScriptで変換したいと考えています1.5

現在、次のコードを使用している間

var value = $('#ingredients-1-quantity').val();
var fraction = Number(value);
if(isNaN(fraction)) {
 if(hasFraction = parseFrac(value)) {
  $('#ingredients-1-quantity-hidden').val(hasFraction);
 }
 else {
  $('#ingredients-1-quantity').val('');
  $('#ingredients-1-quantity-hidden').val('');
 }
}

function parseFrac(frac) {
 frac = frac.split(/ ?(\d+)\/(\d+)/);
 if(!isNaN(parseInt(frac[2])))
   return Math.round(frac[0] * 1 + frac[1] / frac[2], 3);
 else
   return false;
}

また、コードは整数値と浮動小数点値を処理する必要があります。たとえば、print 1OR print1.5と言うと、そのまま返されます。

さらに工夫しています。ユーザーがその下にある食品の量を提供するテキストフィールドを提供する Ingredient フォームがあります。これは、float、integer、またはfraction のいずれかです。

例えば

  1. 小さじ1/2の塩
  2. チリパウダー 小さじ1と1/2
  3. ガーリックパウダー 小さじ2.5
  4. クリームスタイルのホースラディッシュ 小さじ2

ユーザーがfloatまたはintegerで値を提供している場合は問題ありませんが、ユーザーが分数で値を提供している場合は、floatに変換しました。

表示ページでは、(ユーザーが入力した) 数量をそのまま表示しても問題ありませんが、内部使用のために分数を float として保持する必要があります。

上記のコードでこれを機能させました。アイデアをありがとう@Rocket

4

1 に答える 1

4

使用できますeval(文字列がどこから来ているかを信頼できる場合)。

console.log(eval('1/2')); // 0.5
console.log(eval('1.5')); // 1.5

または、 で文字列を分割できます/

var x = '1/2';

var y = x.split('/');
if(y.length > 1){
    console.log(y[0] / y[1]);
}
else{
    console.log(y[0]);
}

UPDATE : 混合数の処理など1 1/2、もう少し解析が必要です。で分割するだけでなく/、スペースで分割する必要があります。

var x = '1 1/2';

var y = x.split(' ');
if(y.length > 1){
    var z = y[1].split('/');
    console.log(+y[0] + (z[0] / z[1]));
}
else{
    var z = y[0].split('/');
    if(z.length > 1){
        console.log(z[0] / z[1]);
    }
    else{
        console.log(z[0]);
    }
}​
于 2012-07-05T16:57:16.000 に答える