食品を除くすべての品目に10%の税金が適用されることを考慮してください。また、輸入品には5%の追加税がかかります。
音楽CDのコストが12.49の場合。アイテムの税金は1.499になります。輸入香水瓶の価格が47.50の場合、その品目の税金は7.125になります。
アイテムに対する税金は0.05単位で四捨五入する必要があるというポリシーがあります。したがって、1.499は1.5に四捨五入し、7.125は7.25に四捨五入する必要があります。
上記の丸め要件は、ロジックを使用して実現できます。
(float) Math.ceil(taxAmount / 0.05f) * 0.05f;
アイテムのコストに税金を追加すると、次のようになります。
音楽CD:12.49 + 1.5 = 13.99輸入チョコレートボックス:47.50 + 7.25=54.65。
次の入力で問題が発生しています。
輸入チョコレートの箱の費用が11.85の場合、税金は0.5925になります。
四捨五入ポリシーを使用すると、四捨五入後の税金は0.6になります。
両方ともフロートである11.85+0.6を追加すると、結果は12.450001になります。他の入力とは異なり、この特定の入力は、他の出力の小数点以下2桁とは対照的に、多くの小数点以下の桁を提供します。
floatの代わりにBigDecimalを使用して、小数点以下2桁に設定されたスケールですべての値を格納してみました。このアプローチの問題は、丸めポリシーが指定されていない場合、bigDecimalが例外をスローする場合があることです。BigDecimalに丸めポリシーを指定すると、BigDecimalに提供された丸めポリシーを使用して、アイテムのコストと該当する税金の合計が丸められ、必要な出力が変更されます。