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 には、Decimals を含む計算に関する独自のルールがあります。

Teradata の基本的なルールは次のとおりです。

ただし、小数桁を乗算すると、たとえば、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

ディーター

于 2013-07-10T15:23:51.373 に答える