如果数字

时间:2017-10-27 14:56:26

标签: javascript

var values = ["50.00024+40.04005+0.1", "0050.00024+040.04005+0.1"];

for (var i=0; i<values.length; i++) {
  if(values[i].indexOf('+')>0 || values[i].indexOf('-')>0 || values[i].indexOf('*')>0 || values[i].indexOf('/')>0){
    try{
      var evaluated = eval(values[i]);
      if(typeof evaluated === 'number'){
        console.log(evaluated);
      }
    }catch (e){
      console.error(e)
    }
  }
}

我有一些数学动作,可能是加号,减号或其他动作,我需要对此动作采取结果。我为此使用了eval。但是,如果我在005,75之前的数字为零,则eval不起作用。我该如何计算呢?

4 个答案:

答案 0 :(得分:2)

您可以拆分字符串并解析数字,然后再将它们转换为字符串以使用eval

&#13;
&#13;
var values = ["50.00024+40.04005+0.1", "0050.00024+040.04005+0.1"];
values.forEach(function(value){
    var newValue = value.split(/([\+\-\*\/])/).map(a => parseFloat(a) || a).join('');
    var evaluated = eval(newValue);
    console.log(value,"==", evaluated);
});
&#13;
&#13;
&#13;

答案 1 :(得分:2)

可以使用math.js之类的各种库来评估表达式:

&#13;
&#13;
console.log(math.eval("0050.00024+040.04005+0.1"))
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.16.5/math.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你应该将它转换为float(例如parseFloat(“005.75”)= 5.75而不是评估字符串

答案 3 :(得分:-1)

根据问题代码,您可以使用.match()获取数字值,.map().reduce()来添加值

var values = ["50.00024+40.04005+0.1", "0050.00024+040.04005+0.1"];

var res = values.map(function(n) {
  return n.match(/[\d.]+/g).reduce(function(a, b) {
    return a + Number(b)
  }, 0)
});

console.log(res);