计算

发布时间: 2019/1/30   最后更新:   访问次数:555

简介

计算模块解析一个表达式并将运算结果输出到指定的变量中。这个模块在内部使用了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)


支持的运算符

  1. 原子运算符 ()
  2. 单目运算符 !not-~(按位取反)
  3. 幂次运算符 (原文作者遗漏了,他写了位运算符 &|^(xor), <<>> )
  4. 乘除运算符 */%
  5. 加减运算符 +-
  6. 关系运算符 ===!=<><<=>>=
  7. 逻辑运算符 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
IEEERemainderIEEE 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)


使用场景

  • 简单的运算求解,比如计算选中的一个数学算式;
  • 比较数字、文本等,以获得分支条件;
  • 变量类型转换,比如将文本转换成数字等;