Java 转换成2个小数点
我这里有一个计算付款率的代码。它可以工作,但某些值会导致大量小数点。我希望结果只转换为2个小数点。我该怎么做?以下为所附代码:Java 转换成2个小数点,java,double,decimal,rounding,Java,Double,Decimal,Rounding,我这里有一个计算付款率的代码。它可以工作,但某些值会导致大量小数点。我希望结果只转换为2个小数点。我该怎么做?以下为所附代码: double rateConv=(((new Double(4.4) * transaction.getAmount())/100)+(transaction.getAmount()+new Double(0.30))); System.out.println(rateConv); tr
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";
}
提前感谢使用DecimalFormat
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(rateConv));
使用十进制
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(rateConv));
有很多方法可以满足你的要求 一, 二, 但是我将永远不会使用double表示货币价值,我建议您看看
大小数
编辑:如果您想将双精度
转换为大十进制
,请查看@Zeeshan的答案
但是最好只使用
大十进制
表示货币值,这样在转换时就不会有任何舍入问题。有很多方法可以满足您的要求
一,
二,
但是我将永远不会使用double表示货币价值,我建议您看看大小数
编辑:如果您想将双精度
转换为大十进制
,请查看@Zeeshan的答案
但是最好只对货币值使用
大十进制
,这样在转换时就不会有任何舍入问题。使用大十进制
BigDecimal bd = new BigDecimal(doubleValue);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.doubleValue();
此处为
取整模式。半向上
将向“最近邻居”取整,除非两个邻居距离相等,在这种情况下,将向上取整。使用大十进制
BigDecimal bd = new BigDecimal(doubleValue);
bd = bd.setScale(2, RoundingMode.HALF_UP);
return bd.doubleValue();
此处为“取整模式”。半向上将向“最近邻居”取整,除非两个邻居距离相等,在这种情况下,将向上取整。尝试如下:
double amount = 123;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(amount));
试着这样做:
double amount = 123;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(amount));
小建议-您不应该使用Double或Float进行货币计算。如果你对舍入值感兴趣,看看这里,我不同意“在货币计算中永远不要使用浮点或双精度”。例如,一些复利计算需要使用对数,并且可以在双精度中足够精确地完成。然而,对于金钱来说,BigDecimal几乎总是更好的选择。小建议-你永远不应该使用Double或Float进行金钱计算。如果你对舍入值感兴趣,看看这里,我不同意“在货币计算中永远不要使用浮点或双精度”。例如,一些复利计算需要使用对数,并且可以在双精度中足够精确地完成。然而,对于金钱来说,BigDecimal几乎总是更好的选择。谢谢。是的,这很有效。谢谢