为什么会这样
weightedValue = CAST(prob*value as FLOAT(53))/CAST(totalValue as FLOAT(53))
完整返回十进制答案,但这
weightedValue = CAST(prob*value as DECIMAL(38,14))/CAST(totalValue as DECIMAL(38,14))
返回在小数点后 6 位截断的十进制答案?
'Prob' 被声明为 DECIMAL(16,14),'value' 是 DECIMAL(17,0),'weightedValue' 都是十进制值并假设总值不超过超出 DECIMAL(38,14) 规范.
除非我遗漏了什么,否则 DECIMAL(38,14) 符号应该给出一个最多 38 个总数和最多 14 个小数精度的值。因此,我不应该在结果中遇到任何截断,不是吗?
此外,我以前认为使用 DECIMAL(,) 总是优于使用 FLOAT() 基于浮点算术中隐含的不精确性以及与结果相关的不确定性——DECIMAL() 可用于做任何 FLOAT() 可以做的事情,但反之亦然。我错过了什么,事实上,不是这样吗?