搜尋套件、儲存庫與 APP 分類

套件詳情v1.2.0

eval_ex

一個數學與布林表達式求值器,移植自 https://github.com/uklimaschewski/EvalEx。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
3460
喜歡數
27
Pub 分數
145

安裝套件

flutter pub add eval_ex

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

EvalEx 是一個輕量級的 Dart 套件,可在執行時評估數學與布林表示式。它支援基本運算、括號、變數以及常見函數,例如 sin、cos 和 log。原本是從 JavaScript 庫移植而來,提供簡單的 API 來安全地解析與計算表示式。非常適合需要動態公式求值的應用程式,例如計算機、金融工具或基於設定的邏輯。此套件可在所有主要平台(包含行動裝置、網頁與桌面)上執行。

適用情境

  • 動態公式計算
  • 計算機應用程式
  • 基於配置的邏輯
  • 財務建模
  • 資料驗證
  • 科學計算

主要特色

  • 支援算術與布林表達式
  • 變數取代
  • 內建數學函數
  • 安全的表達式解析
  • 跨平台相容性
  • 簡單的 API,設定簡單

適合對象

  • 開發計算器的開發者
  • 需要執行時表達式評估的應用程式
  • 教育工具
  • 後端邏輯,包含使用者自訂公式
  • 原型化動態計算

使用建議

  • 不適合高度複雜或效能關鍵的數學運算
  • 不支援自定函數定義
  • 表達式必須在語法上有效
  • 僅限基本操作和標準函數
  • 使用不受信任輸入時的安全警告

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

eval_ex

A Dart port of https://github.com/uklimaschewski/EvalEx.
EvalEx supports mathematical and boolean expression evaluation, using arbitrary precision. EvalEx supports functions, variables, and operators and additionally makes it very easy to add your own custom functions or operators.

EvalEx uses decimal to support arbitrary precision arithmetic.
View package on pub.dev.

Basic example

void main() {
  Expression exp = Expression("2 ^ 4 + 8");
  print(exp.eval().toString()); // 24

  // With a variable
  exp = Expression("a ^ b + c");
  // Variables may contain alphanumeric characters, and "_". This can be changed
  // by using setVariableCharacters(..) and setFirstVariableCharacters(..) (what chars variable are allowed to start with).
  exp.setStringVariable("a", "2");
  exp.setStringVariable("b", "4");
  exp.setStringVariable("c", "8");
  print(exp.eval().toString()); // 24
  
  // With a function
  exp = Expression("MAX(-7,8)");
  print(exp.eval().toString()); // 8

  // Boolean logic
  exp = Expression("1>0 && 5 == 5");
  print(exp.eval().toString()); // 1
  
  exp = Expression("1>0 && 5 == 4");
  print(exp.eval().toString()); // 0
}
 

Built-in functions and operators

Function Description
+ Addition
- Subtraction
* Multiplication
/ Division
% Modulus
^ Power
&& Returns 1 if both expressions are true, 0 otherwise
|| Returns 1 if either or both expressions are true, 0 otherwise
> Returns 1 if the left expression is greater than the right
>= Returns 1 if the left expression is greater than or equal to the right
< Returns 1 if the right expression is greater than the left
<= Returns 1 if the right expression is greater than or equal to the left
= Returns 1 if the left and right expressions are equal
== Returns 1 if the left and right expressions are equal
!= Returns 1 if the left and right expressions are NOT equal
<> Returns 1 if the left and right expressions are NOT equal
STREQ("str1","str2") Returns 1 if the literal "str1" is equal to "str2", otherwise returns 0
FACT(int) Computes the factorial of arg1
NOT(expression) Returns 1 if arg1 evaluates to 0, otherwise returns 0
IF(cond,exp1,exp2) Returns exp1 if cond evaluates to 1, otherwise returns exp2
Random() Returns a random decimal between 0 and 1
SINR(exp) Evaluates the SIN of exp, assuming exp is in radians
COSR(exp) Evaluates the COS of exp, assuming exp is in radians
TANR(exp) Evaluates the TAN of exp, assuming exp is in radians
COTR(exp) Evaluates the COT of exp, assuming exp is in radians
SECR(exp) Evaluates the SEC of exp, assuming exp is in radians
CSCR(exp) Evaluates the CSC of exp, assuming exp is in radians
SIN(exp) Evaluates the SIN of exp, assuming exp is in degrees
COS(exp) Evaluates the COS of exp, assuming exp is in degrees
TAN(exp) Evaluates the TAN of exp, assuming exp is in degrees
COT(exp) Evaluates the COT of exp, assuming exp is in degrees
SEC(exp) Evaluates the SEC of exp, assuming exp is in degrees
CSC(exp) Evaluates the CSC of exp, assuming exp is in degrees
ASINR(exp) Evaluates the ARCSIN of exp, assuming exp is in radians
ACOSR(exp) Evaluates the ARCCOS of exp, assuming exp is in radians
ATANR(exp) Evaluates the ARCTAN of exp, assuming exp is in radians
ACOTR(exp) Evaluates the ARCCOT of exp, assuming exp is in radians
ATAN2R(exp1, exp1) Evaluates the ARCTAN between exp1 and exp2, assuming exp1 and exp2 are in radians
ASIN(exp) Evaluates the ARCSIN of exp, assuming exp is in degrees
ACOS(exp) Evaluates the ARCCOS of exp, assuming exp is in degrees
ATAN(exp) Evaluates the ARCTAN of exp, assuming exp is in degrees
ACOT(exp) Evaluates the ARCCOT of exp, assuming exp is in degrees
ATAN2(exp1, exp1) Evaluates the ARCTAN between exp1 and exp2, assuming exp1 and exp2 are in degrees
RAD(deg) Converts deg to radians
DEG(rad) Converts rad to degrees
MAX(a,b,...) Returns the maximum value from the provided list of 1 or more expressions
MIN(a,b,...) Returns the minimum value from the provided list of 1 or more expressions
ABS(exp) Returns the absolute value of exp
LOG(exp) Returns the natural logarithm of exp
LOG10(exp) Returns the log base 10 of exp
ROUND(exp,precision) Returns exp rounded to precision decimal points
FLOOR(exp) Returns the floor of exp
CEILING(exp) Returns the ceiling of exp
SQRT(exp) Computes the square root of exp
e Euler's number
PI Ratio of circle's circumference to diameter
NULL Alias for null
TRUE or true Alias for 1
FALSE or false Alias for 0

Adding custom functions, operators, and variables

Custom functions, operators, and variables can be defined by adding them in built_ins.dart

Differences from https://github.com/uklimaschewski/EvalEx.

  • Hyperbolic functions aren't supported
  • The SQRT function is currently limited to 64-bit precision
  • Built in operators/functions/variables are instead defined in built_ins.dart

所屬分類

依賴

依賴清單 2 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。