BigDecimal的舍入值

时间:2017-12-04 09:09:40

标签: java

我想创建一个带两个参数的方法。第一个是金额(String),第二个是基于舍入类型的舍入类型。它应该向上或向下舍入值等等......

public static String roundingAmount(String amount, String mode) {
    if (amount != null) {
        double dAmt = Double.parseDouble(amount);
        if (mode.equalsIgnoreCase("Rounded"))
            BigDecimal decimal = new BigDecimal(dAmt).setScale(0, RoundingMode.HALF_UP);
        else if (mode.equalsIgnoreCase("Round UP"))
            BigDecimal decimal = new BigDecimal(dAmt).setScale(0, RoundingMode.CEILING);
        else if (mode.equalsIgnoreCase("Round Down"))
            BigDecimal decimal = new BigDecimal(dAmt).setScale(0, RoundingMode.FLOOR);
        else if (mode.equalsIgnoreCase("NA")) {
            return amount;
        }
        String newNumber = String.format("%.2f", decimal.doubleValue());
        return newNumber;
    }
    return amount;
}

显示未找到错误小数。 你能救我吗?

2 个答案:

答案 0 :(得分:0)

[114.475,15.744,25.807,-873.0,172.0,182.0,188.0, 114.462,15.742,25.88,-1396.0,180.0,192.0,205.0] 仅在每个decimal分支中定义,因此它超出了它们之外的范围。您可以在这些块之外声明它,这也可以为您节省一些代码重复:

if

答案 1 :(得分:0)

用DRY原则扩展Alok的答案(不要重复自己):

public static String roundingAmount(String amount,String mode){
    RoundingMode roundingMode;
    if(amount!=null){
        if(mode.equalsIgnoreCase("Rounded"))
            roundingMode = RoundingMode.HALF_UP;
        else if(mode.equalsIgnoreCase("Round UP"))
            roundingMode = RoundingMode.CEILING;
        else if(mode.equalsIgnoreCase("Round Down"))
            roundingMode = RoundingMode.FLOOR;
        else if(mode.equalsIgnoreCase("NA"))
            return amount;
        else
            throw new IllegalArgumentException(mode + " is not an accepted mode");

        double dAmt=Double.parseDouble(amount);
        BigDecimal decimal = new BigDecimal(dAmt).setScale(0, roudingMode);
        String newNumber = String.format("%.2f" , decimal.doubleValue());
        return newNumber;
    }
    return amount;
} 

为了进一步改进这一点,我建议将RoundingMode枚举直接传递给方法,而不是在代码本身中输入它。这也可以使用switch语句而不是multipe String比较

相关问题