如何在javascript中将fraction转换为float?

时间:2012-07-05 16:51:44

标签: javascript

我想在JavaScript中转换"1 1/2",这样当我说print x(其中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;
}

此外,代码应该处理整数和浮点值。例如,如果我说打印1或打印1.5,它将按原样返回。

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

例如

  1. 1/2 茶匙盐
  2. 1 1/2 茶匙辣椒粉
  3. 2.5 茶匙大蒜粉
  4. 2 茶匙奶油辣根
  5. 如果用户提供浮点数或整数值,但是如果用户提供的值小于我将其转换为浮点值。

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

    我使用上面的代码。感谢@Rocket的想法

1 个答案:

答案 0 :(得分:3)

您可以使用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]);
    }
}​