Double数据累加后导致精度失准处理
2023-12-21 17:11:13
Double数据累加后导致精度失准处理
问题描述
问题如下:当数据相加等于0.3、0.6等时就会失去精度,直接打印0.3是没有问题的
public static void main(String[] args) {
Double d1 = 0.1;
Double d2 = 0.1;
Double d3 = 0.1;
Double d4 = 0.3;
//直接d1+d2+d3 = 0.30000000000000004
System.out.println(d1+d2+d3);
//d1+d2 = 0.2
System.out.println(d1+d2);
//d4 = 0.3
System.out.println(d4);
//直接d1+d2+d3+d1+d4 = 0.7
System.out.println(d1+d2+d3+d1+d4);
//直接d1+d2+d3+d4 = 0.6000000000000001
System.out.println(d1+d2+d3+d4);
}
处理
//转化为bigDeiceml
public static void main(String[] args) {
Double d1 = 0.1;
Double d2 = 0.1;
Double d3 = 0.1;
Double d4 = 0.3;
//直接d1+d2+d3 = 0.3
System.out.println(doubleAdd(d1,d2,d3));
//d1+d2 = 0.2
System.out.println(doubleAdd(d1,d2));
//d4 = 0.3
System.out.println(d4);
//直接d1+d2+d3+d1+d4 = 0.7
System.out.println(doubleAdd(d1,d2,d3,d1,d4));
//直接d1+d2+d3+d4 = 0.6
System.out.println(doubleAdd(d1,d2,d3,d4));
}
/**
* 封装个方便调用的方法
*
* @param d1
* @param d2
* @return
*/
public static Double doubleAdd(Double d1,Double d2){
//这里一定要将double数据转化为String后再转化bigDecimal 不然数据计算还是会失去精度
BigDecimal decimal1 = new BigDecimal(Double.toString(d1));
BigDecimal decimal2 = new BigDecimal(Double.toString(d2));
return decimal1.add(decimal2).doubleValue();
}
/**
* 封装个方便多数值相加的方法
* @param d
* @return
*/
public static Double doubleAdd(Double... d){
return Arrays.stream(d).reduce((a, b) -> doubleAdd(a, b).doubleValue()).get();
}
文章来源:https://blog.csdn.net/qq_39771919/article/details/135131306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!