Double类型 通过for循环 精度丢失
程序员文章站
2022-07-15 13:38:47
...
之前出现这个问题找了很多帖子,发现也有人同样遇到这个问题,
然后解决如下:
//a1 和 a2 两个相加的double类型数据
public double add(double a1, double b1) {
BigDecimal a2 = new BigDecimal(Double.toString(a1));
BigDecimal b2 = new BigDecimal(Double.toString(b1));
return round(a2.add(b2).doubleValue(),2);
}
但是我用了这个方法后,大部分没有出现这种情况,但是个别就是会有这个精度走失;
这 我就强制给它保留小数点后两位(四舍五入):
//v要进行保留两位小数点的数据,scale 一般传2
public double round(Double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = null == v ? new BigDecimal("0.0") : new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
这样就完美解决了 精度走丢的情况。 这个方法也适用Float类型的
上一篇: 递归求数组元素最大值
推荐阅读
-
后端将Long类型数据传输到前端出现精度丢失的问题(品优购订单号orderId精度丢失问题)
-
Double类型 通过for循环 精度丢失
-
[iOS]处理处理浮点类型精度丢失问题
-
Elasticsearch聚合浮点类型丢失精度
-
elasticsearch long类型出现精度丢失问题
-
前端处理后端传回的 Long 类型数据精度丢失
-
double精度丢失问题
-
雪花算法等生成Long类型的长Id返回给前端精度丢失问题解决方案
-
springboot中使用Long类型导致前端获取时精度丢失的问题
-
浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度