有人请告诉我我犯的错误:
我的电话号码是:225.0453,内部保存有4位数字。这是一个USD货币编号,我希望打印出来漂亮。我使用RoundingMode.HALF_EVEN
由于USD使用2个小数位数,所以半个甚至四舍五入的数字应为$ 225.04。但是我得到$ 225.05。
这是我的代码(我将其更改为创建MWE):
@Override
public String toString() {
Currency cur = Currency.getInstance("USD");
BigDecimal result = new BigDecimal("225.0453");
result = result.setScale(cur.getDefaultFractionDigits(),RoundingMode.HALF_EVEN);
NumberFormat nf = NumberFormat.getCurrencyInstance();
nf.setCurrency(cur);
nf.setMaximumFractionDigits(cur.getDefaultFractionDigits());
return nf.format(result.doubleValue());
}
此外,我也将为更好的解决方案而努力,因为这似乎不太正确。 (我尝试过nf.setRoundingMode
,但这根本不起作用)
答案 0 :(得分:3)
RoundingMode
HALF_EVEN
仅在可能的舍入目标之间的值相等时才向偶数舍入。
除非两个邻居都是等距的,否则舍入模式将舍入到“最近的邻居”。
这意味着如果金额为225.045,即等距值,它将四舍五入。但是因为您的225.0453金额大于等距值,所以仍会四舍五入。