Você está na página 1de 3

1.

NCalc

A classe NCalc é um avaliador de expressão matemática no .NET. O NCalc pode analisar


qualquer expressão e avalia seus resultados, incluindo parâmetros e funções dinâmicas ou
estáticas.

O NCalc usa a classe Expression. Nesta classe contém o método Evaluate() que retorna
o atual valor da String representada.

Exemplo:

Expression e = new Expression("2 * 3");


object result = e.Evaluate();

Console.WriteLine(result);

No exemplo acima primeiro criamos uma instancia para Expression. O construtor da


class Expression recebe uma string como parâmetro. Então o método Evaluate() e
chamado e analisa a string e retorna o atual valor representado pela string.

Por padrão, todas as avaliações de processo são case sensitive. Isto significa que todos
os parametos e funções analisadas irão corresponder com o case sensitive.

 FUNÇÔES

Nome Descrição Uso Resultado


Abs Retorna um valor absoluto de numero especifico Abs(-1) 1M
Acos Retorna um ângulo cuja o coseno para um número especifico Acos(1) 0d
Asin Retorna um ângulo cuja o seno para um número especifico Asin(0) 0d
Atan Retorna um ângulo cuja o tangente para um valor especifico Atan(0) 0d
Ceiling Retorna o menor inteiro maior ou igual para um numero especifico Ceiling(1,5) 2d
Cos Retorna o coseno do ângulo especifico Cós(0) 1d
Exp Retorna uma potencia especifica Exp(0) 1d
Floor Retorna o maior inteiro menor ou igual ao numero espeficiado Floor(1.5) 1d
Log Retorna o logaritimo do numero espeficiado Log(1,10) 0d
Log10 Retorna logaritmo de base 10 do numero especificado Log10(1) 0d
Max Retorna o maior numero entre 2 número Max(1,2) 2
Min Retorna o menor numero entre 2 número Min(1,2) 1
Pow Retorna um determinado numero elevado a uma potencia Pow(3,2) 9d
Round Arredonda um valor pelo numero de casas especificado. Round(3.222,2) 3.22d
Sign Retorna um valor que representa um sinal de um numero. 0 para Sign(-10) -1
positivo e -1 para negativo.
Sin Retorna o seno de um ângulo especifico Sin(0) 0d
Sqrt Retorna a raiz quadrada de numero especifico Sqrt(4) 2d
Tan Retorna a tangente de um ângulo especifico Tan(0) 0d
Truncate Calcula a parte integral de um numero Truncate(1.7) 1
E também inclui outras finalidades:

Nome Descrição Uso Resultado


In Retorna qualquer elemento de um conjunto In(1 +1,1,2,3) True
de valores
IF Retorna um valor baseado em uma condição IF(3 % 2 = 1, ‘value is true’, ‘value is false’) ‘value is
true’

FUNCIONALIDADES

Expressões Simples

Expression e = new Expression("2 + 3 * 5");


Debug.Assert(17 == e.Evaluate());

Avaliando Tipos de dados .NET

Debug.Assert(123456 == new Expression("123456").Evaluate()); // integers


Debug.Assert(new DateTime(2001, 01, 01) == new Expression("#01/01/2001#").Evaluate()); // date and times
Debug.Assert(123.456 == new Expression("123.456").Evaluate()); // floating point numbers
Debug.Assert(true == new Expression("true").Evaluate()); // booleans
Debug.Assert("azerty" == new Expression("'azerty'").Evaluate()); // strings

Funções Matemáticas da Biblioteca System.Math


Debug.Assert(0 == new Expression("Sin(0)").Evaluate());
Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate());
Debug.Assert(0 == new Expression("Tan(0)").Evaluate());

Funções Personalizadas

Expression e = new Expression("SecretOperation(3, 6)");


e.EvaluateFunction += delegate(string name, FunctionArgs args)
{
if (name == "SecretOperation")
args.Result = (int)args.Parameters[0].Evaluate() + (int)args.Parameters[1].Evaluate();
};

Debug.Assert(9 == e.Evaluate());

Identificadores de Caracteres Unicode

Debug.Assert("経済協力開発機構" == new Expression("'経済協力開発機構'").Evaluate());


Debug.Assert("Hello" == new Expression(@"'\u0048\u0065\u006C\u006C\u006F'").Evaluate());
Debug.Assert("だ" == new Expression(@"'\u3060'").Evaluate());
Debug.Assert("\u0100" == new Expression(@"'\u0100'").Evaluate());
Define Parametros, dinâmicos ou expressão

Expression e = new Expression("Round(Pow([Pi], 2) + Pow([Pi2], 2) + [X], 2)");

e.Parameters["Pi2"] = new Expression("Pi * [Pi]");


e.Parameters["X"] = 10;

e.EvaluateParameter += delegate(string name, ParameterArgs args)


{
if (name == "Pi")
args.Result = 3.14;
};

Debug.Assert(117.07 == e.Evaluate());