質問は比較的簡単です。中間結果が巨大な10進数である3つの列を計算する必要があります。SQLServerで、キャスト/変換に関係なく基本的に小数点を丸める問題が発生しています。
たとえば、単純な除算を1234/1233としてみましょう。電卓は1,00081103000811を生成します。しかし、SQL Serverでこれを行うと、次のようになります。
-- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision
SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37))
-- Result: rounded at 1.000811
SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233)
-- Correct result at 1,00081103000811
-- But this requires the zeroes to be put in manually when you don't
-- even know the precision of the end result
SELECT 1234.0/1233.00000000000000
この自動丸めが行われるのはなぜですか?そして、テーブルにはさまざまな異なる値が含まれている可能性があるため、数値(intまたはdecの部分)の大きさがわからない場合に、非常に長い10進数値を計算するための最良の方法は何ですか?
ありがとう!