2017-06-04 4 views
0

変更できない任意精度の符号付き10進数。 BigDecimalは、任意の精度整数のスケーリングされていない値と32ビットの整数スケールで構成されます。ゼロまたは正の場合、スケールは小数点の右側の桁数です。負の場合、数値の非スケーリングされた値は、スケールの否定の累乗に10を掛けられます。したがって、BigDecimalで表される数値の値は(unscaledValue×10-scale)です。JavaでBigDecimalまたはDoubleを好む最も一般的なシナリオは何ですか?

これは、ドキュメントが言うことです。ドキュメントに基づいて、BigDecimalのは、私はあなたが超大量

  • を扱っている便利なとき

    • あなたは精度

    を懸念している。しかしBigDecimalのがより良い選択である任意の他のシナリオがあることが表示されます?

  • +1

    すでに言及したカテゴリに該当しない他のシナリオはありますか? –

    +0

    あなたはそれをかなりうまくまとめたと思います。 –

    +1

    質問と回答...それは良いです:) –

    答えて

    0

    Doubleは浮動小数点値です。つまり、正確な値ではありません。したがって、正確な値を与えるBigDecimalを使用する必要があります。 倍精度浮動小数点数は15の有効桁数しか表示されませんが、BigDecimalには有効桁数を自由に設定できます。 MathContextクラスを使用して値を設定できます。 BigDecimalは、科学計算機のようなアプリケーションを開発するためのコードを記述するときに使用されます。私はそれが好きので

    +2

    倍**は**正確な値です。 –

    +0

    https://stackoverflow.com/questions/322749/retain-precision-with-double-in-javaこのリンクをチェックしてください。質問に表示されている例 – thapro

    +1

    Doublesは実際にはすべての実数を正確に表すことはできません。しかし、それはそれらが正確な値ではないということを意味するものではありません。これは10進表記についても同様です。 –

    0

    は、質問は多分、たとえば金融1は一例であり、チェックするためにいくつかの良いサイズを持って、私はhereからそれを取ったよ:

    プライマー

    金融問題の通貨計算には、ほとんどの通貨で小数点以下2桁など、特定の程度の精度が必要です。また、税の場合は常に切り上げるなど、特定のタイプの丸め動作が必要です。

    たとえば、特定の通貨で10.00の製品があり、地方消費税が0.0825または8.25%であるとします。私たちは紙の上にそれを作業する場合、税額は、

    10.00 * 0.0825 = 0.825

    通貨の私達の精度は2桁の小数点以下の後なので、我々は0.825数字を丸めるする必要があります。また、これは税金であるため、常に次の最高額に切り上げることをお勧めします。そうすれば、一日の終わりに口座のバランスが取れたとき、決して税金を下回ることはありません。

    0.825 - > 0.83

    だから、我々は顧客に課金合計は、現地通貨で10.83であると税のコレクタに0.83を支払います。

    1000年*(0.83から0.825)、我々はこれらの1000年を販売した場合、私たちはずっとこのことにより、コレクタを過払いしていることに注意してください=で丸めを行うにはどこ5.00

    もう一つの重要な問題があります与えられた計算。液体窒素を1リットルあたり0.528361で販売したとします。顧客は0.528361 *に来て、100.00リットルを買うので、我々は、合計金額を書き出し、

    100.0 = 52.8361

    これは税ではありませんので、我々は、上または下にこれを丸めることができます私たちの裁量で標準の丸め規則に従って丸めを行うとします。次の有効桁が5より小さい場合は、切り捨てます。そうでなければ切り上げる。これにより、最終価格52.84という数字が得られます。

    ここでは、購入全体の5%割引をプロモーション割引としたいとします。この割引は、52.8361フィギュアまたは52.84フィギュアに適用されますか?違いは何ですか?

    計算1:52.8361 * 0.95 = 50.194295 = 50.19計算2:私たちは、標準的な丸め規則を使用して、最終的な数字を丸め 52.84 * 0.95 = 50.198 = 50.20

    注意。

    2つの数字の間に1センチの違いがあるのを見てください。古いコードは丸めを考慮しないので、常に計算1のように計算を行いました。しかし、新しいコードでは、計算2の場合と同様に、プロモーションや税金などを適用する前に必ず丸めます。これが主な理由の1つです1セント誤差のために。

    関連する問題