いくつかの金融関連の SQL コードをデバッグすると、numeric(24,8) 数学の精度に関する奇妙な問題が見つかりました。
MSSQL で次のクエリを実行すると、A + B * C 式の結果が 0.123457 になります。
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
したがって、2 つの重要なシンボルを失いました。これをさまざまな方法で修正しようとすると、中間乗算結果(ゼロです!)から数値(24,8)への変換がうまくいくことがわかりました。
そして最後に解決策があります。しかし、まだ質問があります。MSSQL がこのように動作する理由と、サンプルで実際に発生した型変換は何ですか?