金額を四捨五入するには、次の要件があります。
1.2448 -> 1.25
3.349 -> 3.35
0.474 -> 0.47
BigDecimalのすべての可能なモードを試しました。setScale (2, RoundingMode .) メソッド、成功なし。結果は次のとおりです。
UP: 1.25, 3.35, 0.48
HALF_UP: 1.24, 3.35, 0.47
CEILING: 1.25, 3.35, 0.48
FLOOR: 1.24, 3.34, 0.47
DOWN: 1.24, 3.34, 0.47
HALF_DOWN: 1.24, 3.35, 0.47
HALF_EVEN: 1.24, 3.35, 0.47
BigDecimal.round() も使用しようとしましたが、どちらも良い結果ではありませんでした。
必要な方法で金額を丸めるにはどうすればよいですか?
編集:
この一見奇妙な方法で実際に丸める必要があるのはなぜですか?
私たちが開発している新しいソフトウェアでは、丸め動作またはレガシー ソフトウェアを再現する必要があります (これは、ビジネスが丸めを行う方法です)。
解決:
すべての計算で BigDecimals を使い続けたいと思っています。
そのため、最後に、「プログレッシブ」丸めを行うこの単純な関数を思い付きました。
public static BigDecimal roundAmount(BigDecimal amount) {
for (int i = amount.scale(); i >= 2; i--) {
amount = amount.setScale(i, RoundingMode.HALF_UP);
}
return amount;
}