在<
,>
,<=
,和>=
运算符被称为关系运算符。
关系表达式:
附加表达式
附加表达式 <
关系表达式
附加表达式 >
关系表达式
附加表达式 <=
_关系表达式
附加表达式 >=
关系表达式
这些运算符用于确定两个值之间的相对排序关系,如下表所示:
手术 | 结果 |
---|---|
x < y | true如果x小于y,false否则 |
x > y | true如果x大于y,false否则 |
x <= y | true如果x小于或等于y,false否则 |
x >= y | true如果x大于或等于y,false否则 |
例如:
复制
0 <= 1 // true
null < 1 // null
null <= null // null
"ab" < "abc" // true
#nan >= #nan // false
#nan <= #nan // false
在计算包含关系运算符的表达式时,以下内容成立:
x
或y
操作数表达式时引发的错误。x
和y
表达式求值而产生的值必须是数字、日期、日期时间、日期时区、持续时间、逻辑值、空值或时间值。否则,"Expression.Error"
会引发带有原因代码的错误。null
,则结果是null
值。true
则认为该值大于false
。x
并y
根据 IEEE 754 标准的规则进行比较:
#nan
,则结果适用false
于所有关系运算符。#nan
,运算符根据排序比较两个浮点操作数的值,-∞ < -max < ... < -min < -0.0 = +0.0 < +min < ... < +max < +∞
其中 min 和 max 是可以表示的最小和最大正有限值。-∞ 和 +∞ 的 M 名称是-#infinity
和#infinity
。
这种排序的显着影响是:
-#infinity
值被认为小于所有其他数字值,但等于另一个-#infinity
。#infinity
值被认为大于所有其他数字值,但等于另一个#infinity
。在and
与or
运营商被称为条件逻辑运算符。
逻辑或表达式:
逻辑与表达式
逻辑与表达式 or
逻辑或表达式
逻辑与表达式:
是表达式
是表达式 and
逻辑与表达式
该or
操作符返回true
其操作数的当至少一个true
。当且仅当左操作数不是 时,才计算右操作数true
。
该and
操作符返回false
其操作数的当至少一个false
。当且仅当左操作数不是 时,才计算右操作数false
。
or
和and
运算符的真值表如下所示,纵轴为左操作数表达式的计算结果,横轴为右操作数表达式的计算结果。
and | true | false | null | error |
---|---|---|---|---|
true | true | false | null | error |
false | false | false | false | false |
null | null | false | null | error |
error | error | error | error | error |
or | true | false | null | error |
---|---|---|---|---|
or | true | false | null | error |
true | true | true | true | true |
false | true | false | null | error |
null | true | null | null | error |
error | error | error | error | error |
在评估包含条件逻辑运算符的表达式时,以下内容成立:
x
ory
表达式时引发的错误。logical
和上定义的null
。如果操作数值不是这些类型,"Expression.Error"
则会引发带有原因代码的错误。x
or 中y
,y
当且仅当x
不计算为 时才会计算表达式true
。x
and 中y
,y
当且仅当x
不计算为 时才会计算表达式false
。最后两个属性赋予条件逻辑运算符“条件”限定;特性也称为“短路”。这些属性对于编写紧凑的受保护谓词很有用。例如,以下表达式是等效的:
复制
d <> 0 and n/d > 1 if d <> 0 then n/d > 1 else false
的+
,-
,*
和/
运营商的算术运算符。
加法表达式:
乘法表达式
加法表达式 +
乘法表达式
加法表达式 -
乘法表达式
乘法表达式:
元数据表达式
乘法表达式 *
元数据表达式
乘法表达式 /
元数据表达式
M 中的数字使用多种表示形式存储,以尽可能多地保留有关来自各种来源的数字的信息。数字仅根据应用于它们的运算符的需要从一种表示形式转换为另一种表示形式。M 支持两种精度:
精确 | 语义 |
---|---|
Precision.Decimal | 128 位十进制表示,范围为 ±1.0 x 10-28 至 ±7.9 x 1028 和 28-29 位有效数字。 |
Precision.Double | 使用尾数和指数的科学表示;符合 64 位二进制双精度 IEEE 754 算术标准IEEE 754-2008。 |
算术运算是通过选择精度,将两个操作数转换为该精度(如有必要),然后执行实际运算,最后返回所选精度的数字来执行的。
内置算术运算符 ( +
, -
, *
, /
) 使用双精度。标准库函数(Value.Add
、Value.Subtract
、Value.Multiply
、Value.Divide
)可用于使用特定精度模型来请求这些操作。
#infinity
或-#infinity
表示幅度太大而无法表示的值。0
并且-0
表示幅度太小而无法表示的值。#nan
(NaN—非数字)用于覆盖算术上无效的情况,例如零除以零。#infinity
或-#infinity
值来执行的。加法运算符 ( x + y
)的解释取决于计算表达式 x 和 y 的值类型,如下所示:
X | 是 | 结果 | 解释 |
---|---|---|---|
type number | type number | type number | 数字和 |
type number | null | null | |
null | type number | null | |
type duration | type duration | type duration | 数值和 |
type duration | null | null | |
null | type duration | null | |
type 约会时间 | type duration | type 约会时间 | 按持续时间偏移的日期时间 |
type duration | type 约会时间 | type 约会时间 | |
type 约会时间 | null | null | |
null | type 约会时间 | null | |
在该表中,type
日期时间代表任何的type date
,type datetime
,type datetimezone
,或type time
。添加持续时间和某种类型的datetime值时,结果值具有相同的类型。
对于表中所列值以外的其他值组合,将"Expression.Error"
引发带有原因代码的错误。以下各节介绍了每种组合。
传播评估任一操作数时引发的错误。
使用加法运算符计算两个数字的总和,产生一个数字。
例如:
复制
1 + 1 // 2
#nan + #infinity // #nan
+
数字上的加法运算符使用双精度;标准库函数Value.Add
可用于指定小数精度。在计算数字总和时,以下内容成立:
x
和y
是非零有限值,z
是 的结果x + y
。如果x
和y
大小相同但符号相反,z
则为正零。如果x + y
太大而无法在目标类型中表示,z
则是与 具有相同符号的无穷大x + y
。
表 7+是+0-0+∞-∞NaNXzXX+∞-∞NaN+0是+0+0+∞-∞NaN-0是+0-0+∞-∞NaN+∞+∞+∞+∞+∞NaNNaN-∞-∞-∞-∞NaN-∞NaNNaNNaNNaNNaNNaNNaNNaN两个持续时间之和就是代表持续时间所代表的100纳秒滴答数之和的持续时间。例如:
复制
#duration(2,1,0,15.1) + #duration(0,1,30,45.3)
// #duration(2, 2, 31, 0.4)
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。