evaluateExpression

Evaluate a string containing a mathematical expression and return the result.

Supported operations are +, -, * and /

@safe
evaluateExpression
(
T
Range
)
(
Range input
)

Parameters

input Range

A string-like range containing a mathematical expression.

Return Value

Type: ExpressionResult!T

Result of the expression. The result will also evaluate to true if it contains a valid number, or false if the expression does not evaluate to a number.

Examples

Evaluate expression can be used to perform mathematical expressions at runtime.

assert(evaluateExpression!int("0") == 0);
assert(evaluateExpression!int("10") == 10);
assert(evaluateExpression!int("123") == 123);
assert(evaluateExpression!int("-0") == -0);
assert(evaluateExpression!int("-10") == -10);
assert(evaluateExpression!int("-123") == -123);

assert(evaluateExpression!int("2+2") == 4);
assert(evaluateExpression!int("2+2-3") == 1);
assert(evaluateExpression!int("1+1*10+3") == 14);
assert(evaluateExpression!int("1+2*10+3") == 24);
assert(evaluateExpression!int("10+-10") == 0);
assert(evaluateExpression!int("4*8") == 32);
assert(evaluateExpression!int("20/5") == 4);

assert(evaluateExpression!int("3/4") == 0);
assert(evaluateExpression!float("3/4") == 0.75);

assert(evaluateExpression!int("(4+5)*2") == 18);
assert(evaluateExpression!int("(4+5)+2*2") == 9+4);
assert(evaluateExpression!int("(4+4*5)*10+7") == (4+4*5)*10+7);
assert(evaluateExpression!int("102+(4+4*5)*10+7") == 102+(4+4*5)*10+7);

Evaluate expression can perform floating point operations.

import std.math;
import std.conv;

assert(evaluateExpression!float("2.0+2.0").isClose(4.0));
assert(evaluateExpression!float("2.4*4.2").to!string == "10.08");
assert(evaluateExpression!float("3/4").isClose(0.75));
assert(evaluateExpression!float("2 * 0.75").isClose(1.5));
assert(evaluateExpression!float("-2 * 0.75 * 100").isClose(-150));

assert(evaluateExpression!float("2e8").isClose(2e8));
assert(evaluateExpression!float("-2e8").isClose(-2e8));
assert(evaluateExpression!float("2e+8").isClose(2e+8));
assert(evaluateExpression!float("2e-8").to!string == "2e-08");
assert(evaluateExpression!float("-2e+8").isClose(-2e+8));

Meta