12
votes

Évaluer la chaîne avec des opérateurs de mathématiques

Y a-t-il un moyen facile d'évaluer les cordes comme "(4 + 8) * 2" Afin que vous obteniez la valeur int de 24?

ou y a-t-il beaucoup de travail nécessaire pour que cela soit fait ...?


3 Réponses :



19
votes

Utilisez ncalc: xxx

http://ncalc.codeplex.com/

En outre, cette question avait déjà été posée et a des réponses intéressantes, y compris NCALC: ÉVALUATION STRING" 3 * (4 + 2) "RENDEMENT INT 18


0 commentaires

41
votes

Quelqu'un d'autre a ajouté cela, puis il a été supprimé. Je pensais que c'était assez cool car aucune bibliothèques tiers requise. XXX


9 commentaires

Dans mon utilisation, cette solution était d'environ 1,5 fois plus rapide que NCALC, tout en étant aussi stable (au moins pour ce que je faisais). Il a manipulé des expressions booléennes aussi identiques que NCALC. Cela devrait être annoncé davantage.


Cela ne gère pas les pouvoirs ou les racines carrées.


Cette solution est parfaite pour les expressions simples que j'en ai besoin. Merci de la ré-poster.


En attendant, j'ai trouvé un problème: les chiffres avec des fractions (comme 1,5) sont analysés avec point (.) Étant le seul séparateur autorisé. est-ce correct? Puis-je compter sur cela dans chaque langue? En allemand, le séparateur standard pour les fractions est Komma (,). Mais quand j'utilise cela, l'analyse échoue.


Zreptil: Vous devez vous assurer que toutes les valeurs de numéro dans votre expression sont écrites à la chaîne avec l'invariantCulture -> i.e.: mydouble.tostring (système.globalization.cultureInfo.invariant culture)


Quelqu'un a-t-il un lien avec quelque chose qui établirait les limitations de cette technique? Ce qui est autorisé / non autorisé, etc.


Ne prenez pas de maintenance des fonctions du journal, de la puissance et des exponentielles


Pas une mauvaise réponse, mais c'est un peu wordy que vous pouvez simplement: double.parse (nouveau îne.data.datatable (). Compute (expression, ""))


Solution très intelligente. Mais un inconvénient supplémentaire est qu'il ne prend pas en charge les opérations binaire, telles que | pour ou, et pour et etc.