简介
计算模块解析一个表达式并将运算结果输出到指定的变量中。这个模块在内部使用了NCalc组件,您也可以参考这个组件的文档以了解这个模块可以实现的功能。
可以结合插值语法将变量的值替换到表达式中。例如表达式为:“$$ {变量a} > 5 and {变量a} < 20” ,如果 变量a 的值为 30,那么表达式在插值后变为“30 > 5 and 30 < 20” ,其结果为false。
以下内容有部分转载自 tangikejun的文章,感谢!
示例
- 类型转换
- $${含有数字的文本变量} => 转换为数字
- $$ '{数字}' => 转换为文本
- 判断
- $$ {变量} > 5 and {变量} < 30
- $$ {变量} * 5 < 20
- $$ {变量1} > {变量2} => 判断 变量1 和 变量2 的大小关系
- $$ '{文本变量}' == 'value' => 判断 文本变量的值是否为'value'
- 计算
- 50 * 2 * Sqrt(40)
- Min(1,2)
支持的运算符
- 原子运算符
(
,)
- 单目运算符
!
,not
,-
,~
(按位取反) - 幂次运算符 (原文作者遗漏了,他写了位运算符
&
,|
,^
(xor),<<
,>>
) - 乘除运算符
*
,/
,%
- 加减运算符
+
,-
- 关系运算符
=
,==
,!=
,<>
,<
,<=
,>
,>=
- 逻辑运算符
or
,||
,and
,&&
函数
函数名 | 描述 | 用例 | 用例结果 |
---|---|---|---|
Abs | 返回绝对值 | Abs(-1) | 1M |
Acos | 返回余弦值对应的角度 | Acos(1) | 0d |
Asin | - | - | d |
Atan | - | - | d |
Ceiling | 向上取整 | Ceiling(1.5) | 2d |
Cos | - | - | d |
Exp | 相当于 e 的 X 次幂 | Exp(0) | 1d |
Floor | 向下取整 | Floor(1.5) | 1d |
IEEERemainder | IEEE 754 标准下的取余操作,具体细节自行百度 | IEEERemainder(3, 2) | -1d |
Log | 以第二个参数为底取对数 | Log(1,10) | 0d |
Log10 | 以10为底取对数 | Log10(1) | 0d |
Max | - | Max(1,2) | 2 |
Min | - | Min(1,2) | 1 |
Pow | - | Pow(3,2) | 9d |
Round | 第二个参数表示保留几位小数,Round 的舍入规则是“四舍六入五成双”,具体的舍入中间值可以在构造 Expression 对象时用 EvaluateOption.RoundAwayFromZero 设定。 | Round(3.222,2) | 3.22d |
Sign | 取符号 | Sign(-10) | -1 |
Sin | - | - | d |
Sqrt | 取平方根 | Sqrt(4) | 2d |
Tan | - | - | d |
Truncate | 截取整数部分 | Truncate(1.7) | 1 |
注:结果中的 M 代表 Decimal 类型,d 代表 Double 类型。
其他通用函数:
函数名 | 描述 | 用例 | 结果 |
---|---|---|---|
in | 判断第一个元素是否在后面的一系列值之中 | in(1 + 1, 1, 2, 3) | true |
if | 类似于 expression ? a:b 。根据表达式结果在后两个参数中选择一个返回 | if(3 % 2 = 1, 'value is true', 'value is false') | 'value is true' |
自定义函数
将Unix时间戳转换为时间:UnixTimestampToDateTime(1552437663)
使用场景
- 简单的运算求解,比如计算选中的一个数学算式;
- 比较数字、文本等,以获得分支条件;
- 变量类型转换,比如将文本转换成数字等;