我有“1/7”并希望获得十进制等值。当然我可以使用eval(“1/7”),但考虑到eval是邪恶的,还有其他方法吗?
答案 0 :(得分:6)
答案 1 :(得分:3)
你可以编写自己的函数,它并不是非常复杂和高效:
function ParseFloat(sFloat) {
var parts = sFloat.split("/");
if (parts.length == 2) {
var first = parseInt(parts[0], 10);
var second = parseInt(parts[1], 10);
if (!isNaN(first) && !isNaN(second))
return first / second;
}
return NaN;
}
用法:
var s = "1/7";
alert(ParseFloat(s));
实时测试案例:http://jsfiddle.net/RK3zS/
编辑:如果您在使用此类实体后,我会使用“class”作为示例:
function DecimalFraction(first, second) {
this.first = first;
this.second = second;
this.toString = function() {
return first / second;
}
}
然后:
var s = new DecimalFraction(3, 7);
alert(s);
我认为更优雅。更新了jsFiddle。
答案 2 :(得分:1)
我猜这是我们唯一的选择。 Eval也不是那么邪恶。否则,创建自己的函数来识别值并进行计算。
答案 3 :(得分:0)
假设你必须计算小数而只计算小数:
txt = "1/7";
firstNumber = txt.subString(0, txt.indexOf('/'));
secondNumber = txt.subString(txt.indexOf('/') + 1, txt.length);
decml = fistNumber / secondNumber;
答案 4 :(得分:0)
尝试这样。
var txt = "1/7";
var result = new Function("return " + txt)()
console.log(result); // 0.14285714285714285