Den*_* H. 1 java currency rounding bigdecimal
有人请告诉我我做的错误:
我有号码:225.0453,内部保存有 4 位数字。这是一个美元货币数字,我想要漂亮的打印显示。我用RoundingMode.HALF_EVEN
由于美元使用 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());
}
Run Code Online (Sandbox Code Playgroud)
此外,我也很乐意提供更好的解决方案,因为这似乎不太正确。(我试过了,nf.setRoundingMode但根本没有用)
该RoundingMode HALF_EVEN轮仅向当值可能四舍五入目标之间等距相邻的偶数。
舍入模式向“最近邻居”舍入,除非两个邻居等距,在这种情况下,向偶数邻居舍入。
这意味着如果数量为 225.045(等距值),它会向下取整。但是因为您的 225.0453 的数量大于等距值,它仍然会向上取整。
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |