..のBigDecimalを使用..金銭的価値を格納する浮動小数点値を使用するはずの
Amount : $45.35
TAX : $ 1.72
-----------------
Total : $47.07
ここでは、販売伝票を作成して3つの値すべてを保存することを前提としています。格納中は、3つの値をすべてdoubleに変換します。したがって、それは2進浮動小数点値になります。
古い販売バウチャーを再度開こうとすると、3つの値を試してみます。あなたがこれは私の経験に基づいて
Amount : $45.36 (//changed)
TAX : $ 1.72
-----------------
Total : $47.07 (//Total sum is as stored, but when you sum
//actual values retrieved, they are different.)
を次のように、現在、私は技術的には、この発生を説明することができません表示されることがあり、異なる値を、受信丸め変換による(二重から10進数)が起こることがあります。
また、あなただけAmount
とTax Rate
を保存することが起こり得るが、あなたがそれらを追加する場合、合計は、顧客が持っている実際の販売バウチャーことより1セント以下のようになります。
Amount : $45.36 /*View after sales*/ Amount : $45.35 /*What customer's*/
TAX : $ 1.72 TAX : $ 1.72 /*voucher says:*/
----------------- -----------------
Total : $47.07 Total : $47.07
保存されている値がペニーに正確な値を表し、値が検索時に最も近いペニーに丸められた場合、実際に大きな数字で作業しない限り、すべての値が正確になります。使用しているフォーマットに関係なく、値が丸められる範囲を定義することが重要です。 「十進数」でも(1.0m/7.0m)* 7.0mは1.0mに等しくありません。 – supercat