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)
    }
  }
}

Tengo algunas acciones matemáticas, podrían ser más, menos u otras acciones, y necesito tomar el resultado de estas acciones. Yo uso eval para esto. Pero si tengo cero antes de un número como 005,75 eval no funciona. ¿Cómo puedo calcular esto?

0
YoroDiallo 27 oct. 2017 a las 17:56

4 respuestas

La mejor respuesta

Puede dividir las cadenas y analizar los números, y luego volverlos a formar una cadena para usar eval

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);
});
2
George 27 oct. 2017 a las 15:34

Hay varias bibliotecas como math.js que se pueden usar para evaluar expresiones:

console.log(math.eval("0050.00024+040.04005+0.1"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.16.5/math.min.js"></script>
2
Slai 27 oct. 2017 a las 15:32

Dado el código en la pregunta, puede usar .match() para obtener valores numéricos, .map() y .reduce() para agregar los valores

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);
-1
guest271314 27 oct. 2017 a las 15:11

Debe convertirlo en flotante (por ejemplo, parseFloat ("005.75") = 5.75 en lugar de evaluar cadenas

0
Gabri T 27 oct. 2017 a las 15:07