2

JAVA+SQL で正確な計算を行うためのオプションについて、簡潔な概要を確立しようとしています。これまでのところ、次のオプションが見つかりました。

  1. 欠点を受け入れてダブルスを使用してください。
  2. BigDecimal を使用する
    • それらを複雑な式で使用することは私にとって問題です
  3. String.format/Decimal.format を使用して double を丸めます
    • BigDecimal の精度を得るには、式の各変数を丸める必要がありますか?
    • これはどのように微調整できますか?
  4. SQL で計算フィールド オプションを使用します。
    • 欠点は、さまざまなテーブルからデータを取得し、他の計算フィールドのフィールドを計算するために動的 SQL が必要であり、面倒になることです。

他のオプションはありますか?

問題文: 非常に大きな数字 (10 億) と非常に小さな数字 (0.0000004321) を使用し、互いに非常に類似した値を除算することを含む正確な財務計算が必要なので、BigDecimal の精度が必要です。

一方で、double が関数内で持っている使いやすさを維持したいので (10 進数の SQL データから配列を操作します)、次のような計算を行います: (a[i] - b[i])/b[i] など。など、他の計算でさらに使用されます。そして、ユーザーが必要に応じて独自の式を設計できるようにしたいと思います(一般的な数学ステートメントを使用して)

私はString.formatに「フォーマット」ソリューションを使用したいと思っていますが、これによりコードが読みにくくなります(各変数にString.format()を使用しています...)。

対処方法をご提案いただき、誠にありがとうございました。

4

4 に答える 4

2

有効な Javaから(2nd ED):

項目 48: 正確な答えが必要な場合は float と double を避ける

  • float と double は正確な結果を提供しないため、正確な結果が必要な場合には使用しないでください。float 型と double 型は、0.1 (またはその他の 10 の負の累乗) を float 型または double 型として正確に表すことができないため、通貨の計算には特に適していません。

  • この問題を解決する正しい方法は、通貨の計算に BigDecimal、int、または long を使用することです。

...

別の方法として、int または long を使用し、自分で小数点を追跡することもできます。

于 2013-04-26T10:33:42.533 に答える