なぜこれは
weightedValue = CAST(prob*value as FLOAT(53))/CAST(totalValue as FLOAT(53))
小数の答え全体を返しますが、これは
weightedValue = CAST(prob*value as DECIMAL(38,14))/CAST(totalValue as DECIMAL(38,14))
小数点第 6 位で切り捨てられた小数の回答を返しますか?
「Prob」は DECIMAL(16,14) として宣言され、「value」は DECIMAL(17,0) であり、「weightedValue」はすべて 10 進数値であり、合計値が DECIMAL(38,14) 仕様を超えないことを前提としています.
何かが欠けていない限り、DECIMAL(38,14) 表記は、最大 38 の合計数と最大 14 の小数精度を持つ値を与える必要があります。したがって、結果に切り捨てが発生することはありません。
さらに、以前は、浮動小数点演算に暗黙的に含まれる不正確さと結果に伴う不確実性に基づいて、FLOAT() を使用するよりも DECIMAL(,) を使用する方が常に好ましいと考えていました。その逆ではありません。私は何が欠けていますか、実際にはそうではありませんか?