我有以下要求四捨五入金額:如何解決這個舍入要求?
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;
}
第一個例子看起來奇怪,究竟你需要? – zch
你確定第二排嗎?在我看來,第一個值不是你所顯示的或舍入不是以這種方式發生 –
爲什麼1.2448變爲1.25? – JasonD