我们有一个页面从数据库中获取数据。一个领域" AmountEur"在显示在视图页面上之前是否正在四舍五入(使用bigdecimal.ROUND_HALF_UP方法)。
代码是这样的:
final Object amountEur = result.get("mtmAmountEUR");
if (amountEur != null) {
BigDecimal mtmAmt = ((BigDecimal) amountEur ).setScale(0, BigDecimal.ROUND_HALF_UP);
result.put("mtmAmount", mtmAmt);
}
使用此代码,我面临一个问题。假设从db获取的数据是2650.5,那么视图页面中显示的数据仅为2650。理想情况下它应该是2651.另一方面,如果db中的数据是2650.55,它在视图页面上显示正常,即2651.我不知道我的代码有什么问题。 有人可以帮忙。
答案 0 :(得分:0)
以下代码段:
BigDecimal bd1=new BigDecimal("2650.499999");
BigDecimal bd2=new BigDecimal("2650.5");
BigDecimal bd3=new BigDecimal("2650.500001");
BigDecimal rounded1=bd1.setScale(0,BigDecimal.ROUND_HALF_UP);
BigDecimal rounded2=bd2.setScale(0,BigDecimal.ROUND_HALF_UP);
BigDecimal rounded3=bd3.setScale(0,BigDecimal.ROUND_HALF_UP);
System.out.println(bd1 + " -> " + rounded1);
System.out.println(bd2 + " -> " + rounded2);
System.out.println(bd3 + " -> " + rounded3);
产生预期的输出:
2650.499999 -> 2650
2650.5 -> 2651
2650.500001 -> 2651
由setScale(.,.)
实现的舍入逻辑存在误解或错误,这是一个更微妙的问题。
尝试打印出BigDecimal
值,以确定您有2650.5而不是2650.499999,例如您使用数字(26,6)。