Teradata で取得した次の結果について、誰か説明してもらえますか。
SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4)) )
結果は次のとおりです。
DECIMAL(18,8)
DECIMAL(18,4) を期待していました
Teradata で取得した次の結果について、誰か説明してもらえますか。
SELECT TYPE(CAST (2.3 AS DECIMAL(18,4)) * CAST (2.3 AS DECIMAL(18,4)) )
結果は次のとおりです。
DECIMAL(18,8)
DECIMAL(18,4) を期待していました
すべての 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
ディーター