2

有人可以解释一下我在 Teradata 中得到的以下结果:

SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4))  )

结果是:

DECIMAL(18,8)

我期待 DECIMAL(18,4)

4

1 回答 1

6

每个 DBMS 都有自己的关于涉及小数的计算的规则。

Teradata 的基本规则是:当您加/减/除 DECIMAL 时,得到的小数精度是两个操作数中较大的一个,例如 dec(10,2) + dec(10,4) = dec(xx,4)

但是当你乘以添加小数时,egdec(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

迪特

于 2013-07-10T15:23:51.373 回答