Java 转换成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

我这里有一个计算付款率的代码。它可以工作,但某些值会导致大量小数点。我希望结果只转换为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";
}
提前感谢

使用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几乎总是更好的选择。谢谢。是的,这很有效。谢谢