我想在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
,它将按原样返回。
我正在详细阐述。我有一个成分表单,我提供文本字段,用户将在其下提供食物数量。这可以是浮点数,整数或分数。
例如
如果用户提供浮点数或整数值,但是如果用户提供的值小于我将其转换为浮点值。
在视图页面上可以显示数量(由用户输入),但对于内部使用,我必须将分数保持为浮点数。
我使用上面的代码。感谢@Rocket的想法
答案 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]);
}
}