“100.0001”.replace(/ \ b0(\ d +)\ b / g,'$ 1')=“100.1”所以这是危险的解决方案
我的解决方案
function $calc(n, round, min, max) {
/// calculate expression from string
/// optional
/// optional. minimum allowed value. if less return 0
/// optional. maximum allowed value. if more return 0
if (!n) return 0;
try {
n = Number(eval(n
.replace(/[^\d\.\-\+\*\/\(\)\e]/g, '')//remove illegal symbols
.replace(/^0+/, '')//replace first leading zero
.replace(/[^\d\.]+0+/g, function (s) {return s.substr(0, 1);}) //replace leading zero
));
} catch (e) { return 0; }
if (n == 0 || !isFinite(n)) return 0;
if (round != undefined) { var t = Math.pow(10, round); n = Math.round(n * t) / t; }
if (min != undefined && n < min) return 0;
if (max != undefined && n > max) return 0;
return n;
}
功能是安全的。如果计算失败或NaN为无穷大,则返回0
$calc('0100.08-(0.01+00.04)')=100.03
$calc('0/0')=0 //NaN
$calc('1/3',2)=0.33 //round