Comment analyser et évaluer une expression mathématique dans une chaîne de caractères (par ex. '1+1'
) sans invoquer eval(string)
pour obtenir sa valeur numérique ?
Avec cet exemple, je veux que la fonction accepte '1+1'
et retourner 2
.
Comment analyser et évaluer une expression mathématique dans une chaîne de caractères (par ex. '1+1'
) sans invoquer eval(string)
pour obtenir sa valeur numérique ?
Avec cet exemple, je veux que la fonction accepte '1+1'
et retourner 2
.
J'ai finalement opté pour cette solution, qui fonctionne pour la somme des entiers positifs et négatifs (et avec une petite modification de la regex, elle fonctionnera aussi pour les décimales) :
function sum(string) {
return (string.match(/^(-?\d+)(\+-?\d+)*$/)) ? string.split('+').stringSum() : NaN;
}
Array.prototype.stringSum = function() {
var sum = 0;
for(var k=0, kl=this.length;k<kl;k++)
{
sum += +this[k];
}
return sum;
}
Je ne sais pas si c'est plus rapide que eval(), mais comme je dois effectuer l'opération de nombreuses fois, je suis beaucoup plus à l'aise en exécutant ce script qu'en créant des tas d'instances du compilateur javascript.
Essayez nerdamer
var result = nerdamer('12+2+PI').evaluate();
document.getElementById('text').innerHTML = result.text();
<script src="http://nerdamer.com/js/nerdamer.core.js"></script>
<div id="text"></div>
Je crois que parseInt
y ES6 peut être utile dans cette situation
let func = (str) => {
let arr = str.split("");
return `${Number(arr[0]) + parseInt(arr[1] + Number(arr[2]))}`
};
console.log(func("1+1"));
L'essentiel ici est que parseInt
analyse le nombre avec l'opérateur. Le code peut être modifié selon les besoins correspondants.
const operatorToFunction = {
"+": (num1, num2) => +num1 + +num2,
"-": (num1, num2) => +num1 - +num2,
"*": (num1, num2) => +num1 * +num2,
"/": (num1, num2) => +num1 / +num2
}
const findOperator = (str) => {
const [operator] = str.split("").filter((ch) => ["+", "-", "*", "/"].includes(ch))
return operator;
}
const executeOperation = (str) => {
const operationStr = str.replace(/[ ]/g, "");
const operator = findOperator(operationStr);
const [num1, num2] = operationStr.split(operator)
return operatorToFunction[operator](num1, num2);
};
const addition = executeOperation('1 + 1'); // ans is 2
const subtraction = executeOperation('4 - 1'); // ans is 3
const multiplication = executeOperation('2 * 5'); // ans is 10
const division = executeOperation('16 / 4'); // ans is 4
Essayez AutoCalculator https://github.com/JavscriptLab/autocalculate Calculer la valeur des entrées et de la sortie en utilisant des expressions sélectives.
Il suffit d'ajouter un attribut pour votre entrée de sortie comme data-ac="(#firstinput+#secondinput)"
Pas besoin d'initialisation, il suffit d'ajouter l'attribut data-ac. Il trouvera automatiquement les éléments ajoutés dynamiquement.
Pour ajouter 'Rs' à la sortie, il suffit de l'ajouter à l'intérieur des crochets. data-ac="{Rs}(#firstinput+#secondinput)"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.