本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数值类型和精度
对于 DECIMAL,我们支持的最大精度和小数位数为 18 位。
精度指定列中可以存储的最大十进制位数,包括小数点的右侧和左侧。您可以指定介于 1 位到 18 位之间的精度,也可以使用 18 位的默认精度。
小数点右侧的小数。小小小小小小小小的小的小的小的小的小的小的小的小的小的小的小的小的小的小的小 您可以指定介于 0 位到 18 位之间的比例,也可以使用 0 位数的默认比例。
除法规则
假设 p1, s1 是第一个操作数的精度和小数位,例如 DECIMAL (10,1)。
假设 p2, s2 是第二个操作数的精度和小数位数,例如 DECIMAL (10,3)。
假设 p, s 是结果的精度和尺度。
假设 d 是结果中的整位数。然后,结果类型为十进制,如下所示:
d = p1 - s1 + s2
|
D = 10-1 + 3 结果中的整位数 = 6 |
s <= MAX (6, s1 + p2 +1) |
S <= MAX (6, 1 + 10 + 1) 结果尺度 = 14 |
p = d + s |
结果精度 = 18 |
精度和小数位数上限为其最大值(18,其中小数位不能大于精度)。
优先级是首先给出至少第一个参数的比例 (s >= s1),然后是足够的整数以表示结果而不会溢出
乘法规则
假设 p1, s1 是第一个操作数十进制 (10,1) 的精度和小数位。
假设 p2, s2 是第二个操作数十进制 (10,3) 的精度和小数位。
假设 p, s 是结果的精度和尺度。
然后,结果类型为十进制,如下所示:
p = p1 + p2 |
p = 10 + 10 结果精度 = 18 |
s = s1 + s2 |
s = 1 + 3 结果尺度 = 4 |
求和或减法规则
类型推断策略,其中调用的结果类型是两个精确数字操作数的十进制和,其中至少有一个操作数是十进制。
假设 p1, s1 是第一个操作数十进制 (10,1) 的精度和小数位。
假设 p2, s2 是第二个操作数十进制 (10,3) 的精度和小数位。
假设 p, s 是结果的精度和小数位数,如下所示:
s = 最大值 (s1, s2) |
s = 最大值 (1,3) 结果尺度 = 3 |
p = max (p1-s1, p2-s2) + s + 1 |
p = max (10-1,10-3) + 3 + 1 结果的精度 = 11 |
s 和 p 的上限为其最大值