0

SQL の専門家の助けが必要です。小数点以下4桁のデータを取得しようとしています。タイプ「お金」で計算を行っています。ただし、計算は私の好みに丸められません。

以下は、通常の数値と money 型の同じ値の例です。

DECLARE @MaxAmt money
DECLARE @MinAmt money

SET @MaxAmt = 207998693.55
SET @MinAmt = 20799442.35

SELECT
((207998693.55 - 20799442.35) / 2 + 20799442.35) / 24 AS Col1,
((@MaxAmt - @MinAmt) / 2 + @MinAmt) / 24 AS Col2

Col1 は 4766627.831250000 に等しい値を表示しますが、Col2 の値は 4766627.8312 です。

私の目標は、4 桁の 10 進数のみを表示することですが、正しく丸める必要があります。4766627.8313 の値が期待できます。

次のキャスト後に表示されるもの。

SELECT CAST(((207998693.55 - 20799442.35) / 2 + 20799442.35) / 24 AS DECIMAL(12,4))

しかし、お金のタイプを扱うとき、小数点以下の値は.8313ではなく.8312です

4

1 に答える 1

3

この動作の最も可能性の高い説明は、型がBanker's RoundingMoneyとして知られているものを使用していることです (そのページを確認すると、これが選択された理由が明らかになるはずです)。

ドキュメントをざっと見てみると、これを変更するために「組み込まれている」ものはないようですDECIMAL.SQL自体でこれを実行したい場合は、最初に明示的にキャストする必要があります. (代替手段には、必要に応じて、計算の少なくとも一部をアプリケーション層に引き出すか、ストアド プロシージャを記述することが含まれます)。

于 2013-03-18T23:56:43.877 に答える