C # calculatrice mathématique [dupliquer]

7 réponses

DataTable a un calculer méthode qui vous permet d'écrire ceci:

var result = new DataTable().Compute("2-3/4*12", null);

notez que ceci est limité aux expressions mathématiques simples.

une autre option consiste à utiliser un langage dynamique dans le DLR comme IronPython et IronRuby. Check-out ce post :

var engine = new IronPython.Hosting.PythonEngine();
double result = pythonEngine.EvaluateAs<double>("2-3/4*12");

vous pouvez également consulter la bibliothèque NCalc sur GitHub .

62
répondu Darin Dimitrov 2017-12-12 09:18:53

il y a des options intéressantes à votre disposition.

  1. NCalc - A C# Lexer Parser construit avec ANTLR . Cela analysera votre texte et vous permettra d'assigner des valeurs à des paramètres / variables. L'interpréteur est C#, donc vous n'avez pas à charger des assemblages supplémentaires dans un domaine app, etc.

  2. JINT - un C# en fonction Interpréteur Javascript créé par le même auteur de ECalc en utilisant ANTLR pour créer la grammaire. Il est actuellement en version bêta, mais fonctionne bien avec les calculs et les fonctions.

  3. CS-Script.Net -du site: "CS-Script is a CLR (Common Language Runtime) based scripting system which uses ECMA-compliant c# as a programming language. CS-Script cible actuellement la mise en œuvre de CLR par Microsoft (.NET 2.0/3.0/3.5) avec des support sur Mono."Chargez les scripts et créez des assemblages en mémoire et séparez le domaine app. Il est assez robuste, et je l'utilise en production pour les scripts intégrés.

8
répondu David Robbins 2010-05-18 18:14:08

découvrez FUIR (Rapide Léger Évaluateur d'Expression) - http://flee.codeplex.com/

Flee est un analyseur et un évaluateur d'expressions pour le .net framework. Il vous permet de calculer la valeur des expressions de chaîne telles que sqrt(a^2 + b^2) à l'exécution. Il utilise un compilateur personnalisé, un langage d'expression fortement typé et un codegen léger pour compiler des expressions directement vers IL. Cela signifie que l'évaluation de l'expression est extrêmement rapide et efficace. Essayez la démo, qui vous permet de générer des images basées sur des expressions, et voyez par vous-même.

c'est gratuit et rapide et je l'ai utilisé dans quelques projets.

4
répondu Alex Warren 2010-05-18 16:29:08

NB: cette réponse est seulement pour être complète. Ce n'est certainement pas une approche que je recommande.

il est possible d'accéder aux bibliothèques JScript (dépréciées) directement depuis C#, ce qui signifie que vous pouvez utiliser l'équivalent de la fonction eval de JScript.

using Microsoft.JScript;        // needs a reference to Microsoft.JScript.dll
using Microsoft.JScript.Vsa;    // needs a reference to Microsoft.Vsa.dll

// ...

string expr = "2 - 3 / 4 * 12";
Console.WriteLine(JScriptEval(expr));    // displays -7

// ...

public static VsaEngine _engine = VsaEngine.CreateEngine();

public static double JScriptEval(string expr)
{
    // error checking etc removed for brevity

    return double.Parse(Eval.JScriptEvaluate(expr, _engine).ToString());
}
3
répondu LukeH 2010-05-18 16:39:07

certainement dans la catégorie" ne recommande pas", mais par souci d'exhaustivité -- si vous avez une base de données à laquelle vous pouvez vous connecter commodément, envoyez-lui la requête "SELECT expression ".

3
répondu Richard Dunlap 2010-05-18 17:17:41

ça semble être une solution très exagérée.

Ce que vous voulez vraiment est un simple analyseur.

vous devez briser la chaîne en jetons et ensuite les évaluer. Cela vous permettra de commencer la recherche. http://en.wikipedia.org/wiki/Parsing#Overview_of_process

0
répondu James Van Boxtel 2010-05-18 16:27:28

la meilleure option est de construire un arbre D'Expression. Vous construisez d'abord l'arbre de votre expression, puis utilisez http://msdn.microsoft.com/en-us/library/system.linq.expressions.aspx vous pouvez le compiler facilement en utilisant http://msdn.microsoft.com/en-us/library/bb356928 (v = VS.100).aspx

0
répondu Andrey 2010-05-18 16:28:39