Explorar o código

公式-换算值
1、double精度问题处理

LHB hai 1 día
pai
achega
1ebf587561

+ 4 - 4
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -3141,23 +3141,23 @@ public class CustomFunction {
             List<Double> list = datas.stream().filter(StringUtils::isNumber).map(m -> Double.valueOf(m.toString())).collect(Collectors.toList());
             list = removeThreeMinAndMaxEfficient(list);
             //计算平均值
-            double asDouble = list.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average().orElse(0.0);
+            BigDecimal asDouble = BigDecimal.valueOf(list.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average().orElse(0.0));
             if (StringUtils.isNotEmpty(angle) && StringUtils.isNotEmpty(pouringSurface)) {
                 //角度  根据平均值从数据库中查询对应的映射值
                 List<Map<String, Object>> angleList = jdbcTemplateStatic.queryForList("select data_value from coordinate_angle where r_value = " + asDouble + " and h_value = " + angle);
                 if (CollectionUtil.isNotEmpty(angleList)) {
                     Map<String, Object> stringObjectMap = angleList.get(0);
-                    asDouble += Double.parseDouble(stringObjectMap.get("data_value").toString());
+                    asDouble = asDouble.add(new BigDecimal(stringObjectMap.get("data_value").toString()));
                 }
                 //角度  根据平均值从数据库中查询对应的映射值
                 List<Map<String, Object>> pouringSurfaceList = jdbcTemplateStatic.queryForList("select data_value from coordinate_pouring_urface where r_value = " + asDouble + " and h_value = '" + pouringSurface + "'");
                 if (CollectionUtil.isNotEmpty(pouringSurfaceList)) {
                     Map<String, Object> stringObjectMap = pouringSurfaceList.get(0);
-                    asDouble += Double.parseDouble(stringObjectMap.get("data_value").toString());
+                    asDouble = asDouble.add(new BigDecimal(stringObjectMap.get("data_value").toString()));
                 }
 
                 //最终值 R H
-                double r = asDouble;
+                double r = asDouble.doubleValue();
                 double h = 0;
 
                 //测区深度 第一种只取第一条数据