我这里有一个代码来计算付款率。它的工作原理是某些值会产生大量的小数点。我希望将结果转换为仅2个小数点。我该怎么做呢?以下是附加代码:
double rateConv=(((new Double(4.4) * transaction.getAmount())/100)+(transaction.getAmount()+new Double(0.30)));
System.out.println(rateConv);
transaction.setCurrencyPsy(rateConv);
transaction.setUserId(getLoginUserProfile().getUserId());
transaction.setTransType(WalletConstant.TRANS_DEPOSIT);
transaction.setIsApproved(false);
transaction.setCreateDate(new Date());
transaction.setIsCiTrans(false);
transDAO.save(transaction,getLoginUserProfile(),getText("email.admin"));
if(transaction.getDepositType().equals(WalletConstant.DEPOSIT_WIREDTRANSFER)){
addActionMessage(getText("msg.success.tt"));
}else{
addActionMsg(getText("msg.success"));
}
transaction = new WalletTransaction();
} catch (Exception e) {
e.printStackTrace();
addActionErr(getText("Error in system.Please contact system's administrator."));
return ERROR;
}
execute();
return "paymount";
}
提前致谢
答案 0 :(得分:3)
使用BigDecimal
BigDecimal bd = new BigDecimal(doubleValue);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.doubleValue();
此处RoundingMode.HALF_UP
将向“最近邻居”舍入,除非两个邻居都是等距的,在这种情况下会向上舍入。
答案 1 :(得分:1)
有很多方法可以满足您的要求
1
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
2
double d = 1.234567;
System.out.printf("%1$.2f", d);
但是 无论如何,我永远不会使用双倍的货币值,我建议你去看看在BigDecimals
编辑:如果您想将Double
转换为Big Decimal
,请查看@ Zeeshan的答案。
,但 最好只使用Big Decimal
作为货币价值,那么转换后你永远不会有任何舍入问题。
答案 2 :(得分:0)
使用DecimalFormat
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(rateConv));
答案 3 :(得分:0)
试试这样:
double amount = 123;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(amount));