算术表达式示例:BizTalk 服务

更新时间: 2015年8月

列出 Microsoft Azure BizTalk Services中的算术表达式示例。

所有算术输入值都基于数字文本,表示 CLR System.Double 类型的数字值。以下示例演示了支持的数字文本:

  • 100

  • 100.25

  • 0.25

  • .25

  • 8e2、8e+2、8E2、8E+2

  • 1.2e8

  • 1.2e-8、1.2E-8

Important重要提示
转换分析器不支持指示数字文本数据类型的后缀。例如,不支持使用 2L 来表示 Long。

Double.TryParse() 方法用于验证数字文本值是否为有效的双精度值。如果不是有效的双精度值,则使用 Convert.ToDouble() 方法将参数转换为双精度值。如果转换失败,则值为零。

算术表达式提醒:

  • 如果某个算术表达式包含多个运算符,则会先执行求模运算,然后再执行加、减运算。

  • 使用括号可控制顺序。例如,将加法或减法输入值括在括号中可以先计算表达式的这一部分。

  • 除非专门使用了 Round,否则不会舍入数字值。

以下示例表达式使用以下输入值:

 

Input1

ab123.456

Input2

78.9

Input3

-123.11

基于 Expression.Add 方法。需要两个双精度类型的参数。如果转换为双精度失败,则返回零值并执行运算。

 

表达式 Result

Input1+Input2

0 + 78.9 = 78.9

由于转换为双精度失败,因此 Input1 为 0。

Input1+Input2+Input3

0 + 78.9 + (-123.11) = -44.21

由于转换为双精度失败,因此 Input1 为 0。

Input2+Input3

78.9 + (-123.11) = -44.21

Input1+Input3

0 + (-123.11) = -123.11

由于转换为双精度失败,因此 Input1 为 0。

基于 Expression.Subtract 方法。需要两个双精度类型的参数。如果转换为双精度失败,则返回零值并执行运算。

 

表达式 Result

Input1-Input2

0 - 78.9 = -78.9

由于转换为双精度失败,因此 Input1 为 0。

Input1-Input2-Input3

0 - 78.9 – (-123.11) = 44.21

由于转换为双精度失败,因此 Input1 为 0。

Input2-Input3

78.9 - (-123.11) = 44.21

Input1-Input3

0 – (-123.11) = 123.11

由于转换为双精度失败,因此 Input1 为 0。

(Input1+Input2)-Input3

(0 + 78.9) – (-123.11) = 202.11

由于转换为双精度失败,因此 Input1 为 0。

基于 Expression.Multiply 方法。需要两个双精度类型的参数。

如果转换为双精度失败,则返回零值并执行运算。如果两个输入都成功转换为双精度,则会执行乘法并返回值。如果只有一个输入成功转换为双精度,则返回该输入的值。如果输入都未成功转换为双精度,则返回零。

 

表达式 Result

Input1*Input2

0 * 78.9 = 78.9

由于转换为双精度失败,因此 Input1 为 0。

Input1*Input2*Input3

0 * 78.9 * (-123.11) = -9713.379

由于转换为双精度失败,因此 Input1 为 0。

Input2*Input3

78.9 * (-123.11) = -9713.379

Input1*Input3

0 * (-123.11) = -123.11

由于转换为双精度失败,因此 Input1 为 0。

(Input1*Input2)-Input3*Input2

(0 * 78.9) – (-123.11) * 78.9 =

78.9 – (-9713.379) = 9792.279

由于转换为双精度失败,因此 Input1 为 0。

基于 Expression.Divide 方法。需要两个双精度类型的参数。

如果转换为双精度失败,则返回零值并执行运算。如果两个输入都成功转换为双精度并且分母值不为零,则会执行除法并返回值。否则返回零。

 

表达式 Result

Input1/Input2

0 / 78.9 = 0

由于转换为双精度失败,因此 Input1 为 0。

Input1/Input2/Input3

0 / 78.9 / (-123.11) = 0

由于转换为双精度失败,因此 Input1 为 0。

Input2/Input3

78.9 / (-123.11) = -0.6408902

Input3/Input1

-123.11 / 0 = 0

由于转换为双精度失败,因此 Input1 为 0。

如果分母为零,该输出为零。

(Input1/Input2)-Input2/Input3

(0 / 78.9) – (-123.11 / 78.9) =

0 – (-1.560329531051965) = 1.560329531051965

由于转换为双精度失败,因此 Input1 为 0。

基于 Expression.Modulo 方法。需要两个双精度类型的参数。

如果转换为双精度失败,则返回零值并执行运算。如果两个输入都成功转换为双精度并且分母值不为零,则返回余数。否则返回零。

 

表达式 Result

Input1%2

0 % 2 = 0

由于转换为双精度失败,因此 Input1 为 0。

Input1+Input2%4

0 + 78.9 % 4 = 2.9

由于转换为双精度失败,因此 Input1 为 0。

78.9 / 4 = 19.725;19 为商,2.9 为余数,因为 78.9 = 4 * 19 + 2.9

Input2%Input1

78.9 % 0 = 0

由于转换为双精度失败,因此 Input1 为 0。

Input3%Input2

-123.11 % 78.9 = -44.21

-123.11 / 78.9 = -1.560329531051965;-1 为商,-44.21 为余数,因为 -123.11 = 78.9 * (-1) + (-44.21)

(Input1%Input2)*Input2%Input3

(0 % 78.9) * (78.9 % (-123.11)) =

0 * (78.9) = 0

由于转换为双精度失败,因此 Input1 为 0。

78.9 / -123.11 = -0.6408902607424255;-0 为商,78.9 为余数,因为 78.9 = -123.11 * (-0) + 78.9

基于 Math.Abs 方法。需要单个参数,并且会将该参数转换为双精度。如果转换为双精度成功,则返回该参数的绝对值。否则返回零。

 

表达式 Result

Abs(Input1)

0

由于转换为双精度失败,因此 Input1 为 0。

Abs(Input2)

78.9

Abs(Input3)

123.11

Abs(Input1)+Abs(Input2)+Abs(Input3)

0 + 78.9 + 123.11 = 202.01

(Abs(Input1)*Abs(Input2))*Input2%Abs(Input3)

(0*78.9) * 78.9 % 123.11 =

78.9 * 78.9 % 123.11 =

6225.21 % 123.11 = 69.71

由于转换为双精度失败,因此 Input1 为 0。

(0*78.9): 请记住,在执行乘法运算时,如果只能将一个参数成功转换为双精度,则返回该参数的值。

6225.21 / 123.11 = 50.566241;50 为商,69.71 为余数,因为 6225.21 = 123.11 * 50 + 69.71

基于 Math.Max 方法。需要两个双精度类型的参数。

如果两个输入都成功转换为双精度,则返回两个输入值的最大值。如果只有一个输入成功转换为双精度,则返回该输入的值。如果输入都未成功转换为双精度,则返回零。

 

表达式 Result

Max(Input1, Input2)

78.9

Input1 未能转换为双精度,因此返回了第二个输入值。

Max(Input2, Input3)

78.9

Max(Input3, Input2)+Max(Input2, Input1)+Max(Input3, Input1)

78.9 + 78.9 + (-123.11) = 34.69

Input1 未能转换为双精度,因此返回了第二个输入值。

(Max(Input1, Input3)*Max(Input2, Input3))* Input2%Abs(Max(Input3, Input1))

((-123.11) * 78.9) * 78.9 % 123.11 =

-9713.379 * 78.9 % 123.11 =

-766385.6031 % 123.11 = -25.8531

Input1 未能转换为双精度,因此返回了第二个输入值。

-766385.6031 / 123.11 = -6225.21;-6225 为商,-25.8531 为余数,因为 -766385.6031 = 123.11 * (-6225) + (-25.8531)

基于 Math.Min 方法。需要两个双精度类型的参数。

如果两个输入都成功转换为双精度,则返回两个输入值的最小值。如果只有一个输入成功转换为双精度,则返回该输入的值。如果输入都未成功转换为双精度,则返回零。

 

表达式 Result

Min(Input1, Input2)

78.9

Input1 未能转换为双精度,因此返回了第二个输入值。

Min(Input2, Input3)

-123.11

Min(Input3, Input2)+ Min(Input2, Input1)+Min(Input3, Input1)

(-123.11) + 78.9 + (-123.11) = -167.32

Input1 未能转换为双精度,因此返回了第二个输入值。

(Min(Input1, Input3)*Min(Input2, Input3))*Input2%Abs(Min(Input3, Input1))

((-123.11) * (-123.11)) * 78.9 % 123.11 =

15156.0721 * 78.9 % 123.11 =

1195814.08869 % 123.11 = 46.65869

Input1 未能转换为双精度,因此返回了第二个输入值。

1195814.08869 / 123.11 = 9713.379;9713 为商,-46.65869 为余数,因为 1195814.08869 = 123.11 * 9713 + 46.65869

基于 Math.Round 方法。至少需要提供一个转换为双精度的参数,可以选择提供第二个参数,但该参数必须为非负整数。如果转换失败,则返回零。

如果不提供第二个参数,则将第一个参数舍入为最接近的整数。如果第二个参数是正整数,则将第一个参数舍入为第二个参数中指定的位数。可舍入的最大位数为 15。即使第二个参数中指定的值更大,也仍会舍入为 15 位数。如果无法将第二个参数转换为非负整数,则返回零。

 

表达式 Result

Round(Input1)

0

由于转换为双精度失败,因此 Input1 为 0。

Round(Input3, 1)

-123.1

Round(Input3, 5)

-123.11

Round(Input2)*Round(Input3, 1)

-79 * (-123.1) = -9724.9

Round(Input3)/Round(Input2, 17)*Round(Input3)

123 / 78.9 * 123 =

1.5589353 * 123 = 191.74904

基于 Math.Sqrt 方法。需要单个参数,并且会将该参数转换为双精度。如果转换成功,则返回平方根。如果参数是负数,则返回 NaN。如果转换失败,则返回零。

 

表达式 Result

Sqrt(Input1)

0

由于转换为双精度失败,因此 Input1 为 0。

Sqrt(Input2)

8.882567196480981

Sqrt(Input3, 5)

NaN

由于输入为负,因此 Input3 为 NaN(非数字)。

Sqrt(Input1)+Sqrt(Input2)*Sqrt(Input3)

0 + 8.882567196480981 * NaN = NaN

由于转换为双精度失败,因此 Input1 为 0。

由于字符串为负数,因此 Input3 为 NaN。

与 NaN 相关的任何算术运算都会导致返回 NaN。

Sqrt(Input2)+Round(Input3, 1)*Abs(Input1)

8.882567196480981 + (-123.1) * 0 =

8.882567196480981 + (-123.1) = -114.217432803519

由于转换为双精度失败,因此 Input1 为 0。

(-123.1 * 0): 请记住,在执行乘法运算时,如果只能将一个参数成功转换为双精度,则返回该参数的值。

如果“算术表达式”映射操作出错,则默认情况下将中止整个转换。此错误处理行为是可配置的。请参阅BizTalk 服务中的表达式 - 用法和示例中的“错误和数据处理”

另请参阅

显示: