我有以下代码:
SELECT -701385.10 -- -701385.10
SELECT SUM(-701385.10) -- -701385.10
SELECT -701385.10/2889991754.89 -- -0.000242694498630
SELECT SUM(-701385.10)/2889991754.89 -- -0.000242
在最后SELECT
结果被截断至小数点后 6 位。我已经读过精度、比例和长度文章,除非我的工作错误,否则我无法理解为什么会发生截断。表达式的类型SUM(-701385.10)
应该DECIMAL(38,2)
- see SUM- 因此除法产生的类型应该具有:
精确:
- p1 - s1 + s2 + 最大值(6, s1 + p2 + 1)
- 38 - 2 + 2 + 最大(6, 2 + 10 + 1)
- 38 - 最大(6,13)
- 38 - 13
- 25
Scale:
- 最大值(6, s1 + p2 + 1)
- 最大(6, 2 + 10 + 1)
- 最大(6, 13)
- 13
那么为什么小数位会被截断呢?
你的工作方式是错误的
Precision: p1 - s1 + s2 + max(6, s1 + p2 + 1)
Scale: max(6, s1 + p2 + 1)
Gives
Precision: 38 - 2 + 2 + max(6, 2 + 12 + 1) = 53
Scale: max(6, 2 + 12 + 1) = 15
它大于 38,所以你会被截断如此处所述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)