浮動小数点型の加算が不正確であるのと同様に、精度を超えると、10進型の乗算が不正確になる(または不正確になる)可能性があります。 データ型の変換
を参照してください。 および
NUMERIC(24,8)
を乗算したので およびNUMERIC(24,8)
、およびSQL Serverは、コンテンツではなくタイプのみをチェックします。48桁の精度すべてを保存できない場合(最大は38)、10進数以外の潜在的な16桁(24〜8)を保存しようとします。それらの2つを組み合わせると、32の非10進数が得られ、6桁の10進数(38〜32)しか残りません。
したがって、元のクエリ
SELECT A, B, C, A + B * C
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C ) T
に減少します
SELECT A, B, C, A + D
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C,
CAST(0 AS NUMERIC(38,6)) AS D ) T
繰り返しますが、NUMERIC(24,8)
の間 およびNUMERIC(38,6)
、SQL Serverは、小数点以下の桁数が32桁になる可能性があるため、A + D
を保存しようとします。
SELECT CAST(0.12345678 AS NUMERIC(38,6))
これにより、0.123457
丸めた後。