如何将“1 1/4”转换为1.25?
我想获取用户输入并将其转换为逻辑数字等效项。我说合乎逻辑,因为2 R和R 2需要为2(与测量脊椎按摩疗法调整有关)。一切都有效,直到他们需要能够使用混合分数。
这是否有图书馆?
唯一不起作用的数字是“1 1/4”,将错误转换为“2.75”。
// Sample input
var values = ["2.5", "1 1/4", "1/4", "2 R", "R 2"];
function l(msg) {
console.log(msg)
}
function toDecimal(x) {
if (x.indexOf('/') != -1) {
var parts = x.split(" ")
var decParts = parts[1].split("/")
return parseInt(parts[0], 10) + (parseInt(decParts[0], 10) / parseInt(decParts[1], 10))
} else {
return x
}
}
function total_it_up(values){
var total = 0,
value = 0
if(values === undefined)
return 0
$.each(values, function(index, value){
value = value.replace(/[^0-9./]+/g, "")
value = eval(value)
l(value)
total += parseFloat(value)
})
return total
}
function toDecimal(x) {
if (x.indexOf('/') != -1) {
var parts = x.split(" ")
var decParts;
if (parts.length > 1) {
decParts = parts[1].split("/");
}
else {
decParts = parts[0].split("/");
parts[0] = 0;
}
return parseInt(parts[0], 10) + (parseInt(decParts[0], 10) / parseInt(decParts[1], 10))
} else {
return x
}
}
function total_it_up(values){
var total = 0;
if(values === undefined)
return 0;
$.each(values, function(index, value){
total += parseFloat(toDecimal($.trim(value.replace(/[^0-9./ ]+/g, ""))));
})
return total;
}
答案 0 :(得分:2)
我们没有看到对toDecimal()的任何调用,所以我假设$.each
循环在原始代码中调用它。如果是这种情况,则1 1/4将变为2.75,因为正则表达式正在剥离1和1/4之间的空间,从而产生11/4,即2.75。允许空格,但$.trim
结果,以便删除任何前导或尾随空格。您也不必使用eval()
。
答案 1 :(得分:0)
我之前意外发布了perl而不是JS。这是正确的。请做清洁。
实施例
<html>
<body>
<script language=javascript>
var txt='4 1/2';
var re1='(\\d+)'; // Integer Number 1
var re2='.*?'; // Non-greedy match on filler
var re3='(\\d+)'; // Integer Number 2
var re4='.*?'; // Non-greedy match on filler
var re5='(\\d+)'; // Integer Number 3
var p = new RegExp(re1+re2+re3+re4+re5,["i"]);
var m = p.exec(txt);
if (m != null)
{
var int1=m[1];
var int2=m[2];
var int3=m[3];
document.write("("+int1.replace(/</,"<")+")"+"("+int2.replace(/</,"<")+")"+"("+int3.replace(/</,"<")+")"+"\n");
}
</script>
</body>
</html>
答案 2 :(得分:0)
这太糟糕了。
function ConvertFraction(fraction)
{
eval(fraction.replace('R','').trim().replace(' ', '+'))
}