MOD 标量函数 (scalar function)
MOD函数将第一个参数除以第二个参数,并返回余数。
该模式是 SYSIBM。
计算余数的公式为:
MOD(x,y) = x - FLOOR(x/y) * y其中 x/y 是除法的截断整数结果。 只有当第一个参数为负时,结果才为负。每个参数必须是一个返回任何内置数值数据类型的值的表达式。
参数也可以是字符串或图形字符串数据类型。 字符串输入隐式转换为数值 DECFLOAT(34)。
结果可以为空; 如果任何自变量为空,那么结果为空值。
结果属性基于以下论点:
- 如果两个参数都是整数,则结果的数据类型为整数。
- 如果两个参数都是整数,且至少有一个参数是大整数,则结果的数据类型为大整数。
- 如果一个参数是整数,另一个是十进制数,则结果的数据类型为十进制数,精度和范围与十进制参数相同。
- 如果两个参数都是十进制,则结果的数据类型为十进制。 结果的精确度为
min(p-s,p'-s') + max(s,s'),结果的比例为max(s,s'),其中符号p 和 s 表示第一个参数的精确度和比例, 符号p' 和 s' 表示第二个参数的精确度和比例。 - 如果一个参数是浮点数,而另一个参数不是 DECFLOAT,或者两个参数都是浮点数,则结果的数据类型为双精度浮点数。
该操作以浮点形式执行。 如有必要,操作数首先转换为双精度浮点数。 例如,涉及浮点数和整数或小数数的操作,会使用转换为双精度浮点的整数或小数数的临时副本进行。 浮点运算的结果必须处于浮点数范围内。
- 如果任一参数为 DECFLOAT,则结果的数据类型为 DECFLOAT(34)。
如果任一参数是特殊的十进制浮点值,则适用算术运算的一般规则。 更多信息,请参阅 DECFLOAT的一般算术运算规则。
如果第一个参数是 DECFLOAT,第二个参数为零,则结果为 NaN ,并返回无效操作条件。
示例 :假设 M1 是两个主变量。 M2 是两个主变量。 求余数,除以 M1 除以 M2 的余数。
SELECT MOD(:M1,:M2)
FROM SYSIBM.SYSDUMMY1;下表显示了不同 M1 和 M2。
| M1 数据类型 | M1 价值 | M2 数据类型 | M2 价值 | 结果
MOD(:M1,:M2) |
|---|---|---|---|---|
| INTEGER | 5 | INTEGER | 2 | 1 |
| INTEGER | 5 | 小数点后三位(3,1) | 2.2 | 0.6 |
| INTEGER | 5 | 小数点后三位(3,2) | 2.20 | 0.60 |
| 小数点后4位,保留两位小数 | 5.50 | 小数点后4位,保留一位小数 | 2.0 | 1.50 |
| DECFLOAT | 1 | DECFLOAT | 负无穷大(F) | 1 |
| DECFLOAT | -0 | DECFLOAT | INFINITY | -0 |
| DECFLOAT | -0 | DECFLOAT | 负无穷大(F) | -0 |
