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;
}


可实现四舍五入



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值