私はJavaアプリケーション内にスクリプトエンジンを実装するオープンソースプロジェクト(axil)を使用していますが、BigDecimalの丸めを利用しようとしているときに大きな障害にぶつかりました。BigDecimalは、入力を科学的記数法に変換してから、渡された精度を、非SN表現ではなく、数値のSN表現の係数に適用しているようです。例えば:
new BigDecimal("-232454.5324").round(new MathContext(2, RoundingMode.HALF_UP)).toString()
の結果を生成し-2.3E+5
ます。これは私にとって2つの問題を提示します。-232454.5
まず、 (-2.324545E+5
)の結果を期待しているので-230000
、結果を含むすべての数学を破棄します。そして第二に、私はSNで結果を取得することを期待しておらず、回避する方法も見つけることができません(ただし、まだ遭遇していないフォーマット方法があると思います)。
プロジェクトの性質上、round()メソッドに渡される数値のサイズ/タイプについてはほとんど期待できないため、ソリューションは高度にモジュール化する必要があります。誰か提案はありますか?役立つ場合は、プロジェクトのこのバグに関するGoogleコードの問題レポートへのリンクをご覧ください。 そして、ここにプロジェクトのホームページへのリンクがあります。
どんな助けでも大歓迎です。