跳到主要内容

计算

把一段文本当成公式或表达式来计算。只要比两个数,用 比较数字;只要赋给变量,用 赋值

当前模块定义

sys:compute计算与比较Action
标准模块
输入 3 · 输出 2

输入参数

  • 表达式expressionText必填

    要计算的表达式

    填写 输入或变量默认 1+1
  • 增强模式evalVarBoolean可选

    支持在表达式中使用{变量名}和Math对象

    填写 固定输入默认 false
  • 失败后停止stopIfFailBoolean可选

    失败后是否停止动作

    填写 固定输入默认 true

输出参数

  • 是否成功isSuccessBoolean

    操作是否成功

  • 结果outputAny

    将表达式计算结果写入变量

概述

例如 3*5+20 得到 3515>6 得到真。可结合 插值 把变量嵌进公式:表达式写成 $$ {变量a} > 5 and {变量a} < 20,若 变量a30,插值后变成 30 > 5 and 30 < 20,结果为假。

计算

对表达式进行计算。
表达式
1+1
要计算的表达式
是否成功
-- 选择变量 --
操作是否成功
结果
-- 选择变量 --
将表达式计算结果写入变量

参数说明

表达式:要计算的公式。

增强模式:开启后支持在表达式里使用 {变量名} 和 C# 的 Math。默认关闭。

失败后停止:计算失败是否中止动作。默认开启。旧稿未写。

输出

  • 是否成功:计算是否成功。旧稿未写。
  • 结果:计算结果。

普通模式与增强模式

普通模式

内部使用 NCalc。也可以结合插值:

  • 类型转换:$${含有数字的文本变量} → 数字;$$ '{数字}' → 文本
  • 判断:$$ {变量} > 5 and {变量} < 30
  • 计算:50 * 2 * Sqrt(40)Min(1,2)

以下运算符和函数说明有部分转载自 tangyikejun 的文章,感谢。

普通模式支持的运算符

  1. 原子运算符 (, )
  2. 单目运算符 !, not, -, ~(按位取反)
  3. 幂次运算符;位运算符 &, |, ^(xor), <<, >>
  4. 乘除运算符 *, /, %
  5. 加减运算符 +, -
  6. 关系运算符 =, ==, !=, <>, <, <=, >, >=
  7. 逻辑运算符 or, ||, and, &&

普通模式支持的函数

结果中的 M 代表 Decimal,d 代表 Double。

函数名描述用例用例结果
Abs绝对值Abs(-1)1M
Acos反余弦Acos(1)0d
Asin反正弦d
Atan反正切d
Ceiling向上取整Ceiling(1.5)2d
Cos余弦d
Expe 的 X 次幂Exp(0)1d
Floor向下取整Floor(1.5)1d
IEEERemainderIEEE 754 取余。普通取余用 %,如 15 % 7 为 1IEEERemainder(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(3.222,2)3.22d
Sign符号Sign(-10)-1
Sin正弦d
Sqrt平方根Sqrt(4)2d
Tan正切d
Truncate截取整数部分Truncate(1.7)1

其它通用函数:

函数名描述用例结果
in第一个元素是否在后面的值之中in(1 + 1, 1, 2, 3)true
if类似 条件 ? a : bif(3 % 2 = 1, 'value is true', 'value is false')'value is true'

自定义函数:把 Unix 时间戳转成时间 UnixTimestampToDateTime(1552437663)

增强模式

语法与通用 表达式 相同。前面不必写 $=;如果写了,会先算一遍,再把结果当成表达式算第二遍。

限制与排障

普通模式不认 {变量名},要把变量嵌进去请用插值 $$,或打开增强模式。增强模式里再写 $= 会解析两遍,结果往往不是你想要的。公式非法时步骤失败,可看 是否成功

示例动作

计算多行
获取选中的文本=> {context}
注释拆分成列表。 支持3种换行。
赋值$={context}.SplitToList("\r\n","\n","\r") => {lines}
每个对 {lines} 的每项执行
注释如果行不为空,则计算
如果/否则判断条件:$= !String.IsNullOrWhiteSpace({context})
计算{context} => {lineResult}
注释如果计算成功,则输出结果,否则原样输出
如果/否则判断条件:{isSuccess}
列表操作添加元素到末尾 {resultList}
Else
列表操作添加元素到末尾 {resultList}
Else
注释空的情况,输出空行
列表操作添加元素到末尾 {resultList}
组合成文本$${result} {context} = {lineResult}
发送文本到窗口{resultList}

相关链接

更新于