我想创建一个带两个参数的方法。第一个是金额(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;
}
显示未找到错误小数。 你能救我吗?
答案 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比较