double类型四舍五入问题

在开发中,对double类型数字四舍五入时,写了一个方法,如下


/**
* 设置double数字格式
* @param val
* @param newScale
* @return
*/
public double doubleDeal(double val){
double number = 0.00;
DecimalFormat df = new DecimalFormat("#.00");
number = Double.parseDouble(df.format(val));
return number;
}

/**
* 设置是数字类型的字符串格式
* @param val
* @param newScale
* @return
*/
public double doubleDeal(String val){
double number = 0.00;
if (val == null || "".equals(val)) {
val = "0";
}
try{
number = Double.parseDouble(val);
}catch (Exception ex) {
val = "0";
}
DecimalFormat df = new DecimalFormat("#.00");
number = Double.parseDouble(df.format(number));
        return number;
}



但是程序运行时,发现对与四舍五入会出现问题如下


public static void main(String[] args){
new WorkloadReviewCheck().doubleDeal(-4.684);
new WorkloadReviewCheck().doubleDeal(-4.674);
new WorkloadReviewCheck().doubleDeal(-4.685);//
new WorkloadReviewCheck().doubleDeal(-4.675);
new WorkloadReviewCheck().doubleDeal(-4.686);
new WorkloadReviewCheck().doubleDeal(-4.676);
new WorkloadReviewCheck().doubleDeal(-4.655);
new WorkloadReviewCheck().doubleDeal(-4.645);//
}


会出现如果第二位为偶数第三位为5则五舍六入的问题。



经过查询资料发现  

DecimalFormat df = new DecimalFormat("#.00");
java默认的格式是HALF_EVEN   根据如果第二位为偶数第三位为5则五舍六入

对这个方法该进

/**
* 设置double数字格式
* @param val
* @param newScale
* @return
*/
public double doubleDeal(double val){
double number = 0.00;
DecimalFormat df = new DecimalFormat("#.00");
//java默认的格式是HALF_EVEN   根据如果第二位为偶数第三位为5则五舍六入
df.setRoundingMode(RoundingMode.HALF_UP);
number = Double.parseDouble(df.format(val));
return number;
}


可实现四舍五入



猜你喜欢

转载自blog.csdn.net/Aseasonv/article/details/77993966
今日推荐