有人可以解释我在Teradata中得到的以下结果:
SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4)) )
结果是:
DECIMAL(18,8)
我期待DECIMAL(18,4)
答案 0 :(得分:5)
每个DBMS都有自己关于涉及小数的计算的规则。
Teradata的基本规则是: 当您添加/减去/除去DECIMAL时,得到的小数精度是两个操作数中较大的一个,例如dec(10,2)+ dec(10,4)= dec(xx,4)
但是当你乘以小数位时,加上例如,dec(10,2)* dec(10,4)= dec(xx,6)
整体精度有一些规则(一些取决于dbscontrol MAxDecimal设置)。
然后是最重要的规则,人们往往会忘记: 每次计算后,结果都会四舍五入到这个精度。
sel 2.0/3.00 * 100, 100*2.0/3.00;
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
((2.0/3.00)*100) ((100*2.0)/3.00)
----------------- -----------------
67.00 66.67
迪特