2017-05-18 9 views
2

数年前、私はお金と保険を扱うアプリケーションを書くのを助けました。当初、私たちは浮動小数点数でお金を表しました(大きなノーノ、私は知っています)。ほとんどのアプリケーションで値の加算と減算が行われていたため、問題はありませんでした。しかし、特定の部分は金額のパーセンテージ、したがって乗算と除算を扱っています。整数/ BigIntegerとBigDecimalのお金を表す

すぐに浮動小数点エラーに悩まされ、大きなリファクタリングをしなければなりませんでした。その問題を解決した任意の精度ライブラリを使用しました。しかし、それはあなたが1センチの端数で終わることができるという事実を変えなかった。どのようにそれをラウンドすることになっていますか?短い答えは "it's complicated"です。

今、私は古いものに取って代わるために同様のアプリケーションで作業を開始する準備ができています。私は何年も前からこれを検討してきました。私はいつも、伝統的な人にやさしい$0.00形式にそれを印刷する機能を持つペニーの数を表す整数(またはBigInteger)をラップする金額データ型を作成することが最も簡単だと考えました。

しかしこれを調べると、最近実装されたJava Money APIのJSR 354が見つかりました。私はそれがBigDecimalとお金の表示を裏付けることを発見するために驚いた。そのため、四捨五入のための特定のロジックが含まれています。

あなたの計算で1センチメートルの小数部を運ぶことの利点は何ですか?なぜ私は、1セントが「原子」の形のお金であると言っているのではなく、それをしたいのですか?

+0

ではありません。私は今日、分数セントの価格を持つ商品を買った。 – EJP

+0

あなたは[millage率](http://www.investopedia.com/terms/m/millagerate.asp?lgl=myfinance-layout)に精通していますか?または[ガソリン]の価格(http://www.nacsonline.com/YourBusiness/FuelsReports/GasPrices_2013/Pages/Why-Is-Gas-Priced-Using-Fractions.aspx)? –

答えて

4

これは、実装の回答が異なるため、広い質問です。

私は$ 5バルク1000個のアイテムを購入した場合、その後、各項目を個別にあなたがお金の「原子状」$ 0.01であることを主張するもの未満である、$ 0.005かかるだろう。

$ 0.01を可能な限り低い金額と見なした場合、私の例のような特定の状況で計算を処理することはできません。

このため、JavaMoney APIは小数点以下の桁数を多く処理します。そのような場合に精度が失われないようにします。

関連する問題