1

我想"1 1/2"在 JavaScript 中进行转换,以便当我说 print x (where x = "1 1/2") 时它返回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它将按原样返回。

我正在详细说明。我有一个成分表,我在其中提供文本字段,用户将在其中提供食物数量。这可以是浮点数、整数或分数。

例如

  1. 1/2茶匙盐
  2. 1 1/2茶匙辣椒粉
  3. 2.5茶匙大蒜粉
  4. 2茶匙奶油色辣根

如果用户以浮点数或整数形式提供值,那很好,但如果用户以分数形式提供值,那么我将其转换为浮点数。

在视图页面上,可以按原样显示数量(由用户输入),但对于内部使用,我必须将分数保持为浮点数。

我用上面的代码得到了这个。感谢@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]);
}

更新:处理混合数字,例如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 回答