Forráskód Böngészése

添加Arith工具类解决精度丢失的问题

yq 4 éve
szülő
commit
030fe2b3a1

+ 2 - 1
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/AlFsdAllServiceImpl.java

@@ -5,6 +5,7 @@ import com.bizmatics.mhfire.service.AlFsdAllService;
 import com.bizmatics.mhfire.service.AlFsdSeqService;
 import com.bizmatics.mhfire.service.enums.BsSaOneCode;
 import com.bizmatics.mhfire.service.enums.BsSaTwoCode;
+import com.bizmatics.mhfire.service.util.Arith;
 import com.bizmatics.mhfire.service.vo.AlFsdAllVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -39,7 +40,7 @@ public class AlFsdAllServiceImpl implements AlFsdAllService {
         //行政许可-消防安检申报不同意
         Integer disagreeCount = alFsdDisagreeMapper.selectCount(startTime, endTime);
         alFsdAllVo.setArticleNumber(seqCount+disagreeCount);
-        alFsdAllVo.setQualifiedRadio((double) (seqCount/(seqCount+disagreeCount)));
+        alFsdAllVo.setQualifiedRadio(Arith.div(seqCount,seqCount+disagreeCount));
         return alFsdAllVo;
     }
 }

+ 2 - 1
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/FireStatisticsServiceImpl.java

@@ -10,6 +10,7 @@ import com.bizmatics.mhfire.persistence.mapper.po.UnitPO;
 import com.bizmatics.mhfire.service.FireStatisticsService;
 import com.bizmatics.mhfire.service.UnitService;
 
+import com.bizmatics.mhfire.service.util.Arith;
 import com.bizmatics.mhfire.service.vo.FireLevelRatioVO;
 import com.bizmatics.mhfire.service.vo.FireUnitPoliceVO;
 import org.checkerframework.checker.nullness.Opt;
@@ -108,7 +109,7 @@ public class FireStatisticsServiceImpl implements FireStatisticsService {
         }
         int finalFireCount = fireCount;
         if (0 != finalFireCount){
-            orderByList.forEach(fireLevelRatio -> fireLevelRatio.setRadio(fireLevelRatio.getRadio()/finalFireCount));
+            orderByList.forEach(fireLevelRatio -> fireLevelRatio.setRadio(Arith.div(fireLevelRatio.getRadio(),finalFireCount)));
         }
         return orderByList;
     }

+ 5 - 4
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/FireWaterServiceImpl.java

@@ -6,6 +6,7 @@ import com.bizmatics.mhfire.persistence.mapper.FireWaterMapper;
 import com.bizmatics.mhfire.persistence.mapper.po.FireWaterPO;
 import com.bizmatics.mhfire.service.FireWaterService;
 
+import com.bizmatics.mhfire.service.util.Arith;
 import com.bizmatics.mhfire.service.vo.FireWaterStatisticsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -56,11 +57,11 @@ public class FireWaterServiceImpl implements FireWaterService {
                 fireWaterMapper.selectCountByWaterNature(null,null,"市政",startTime,endTime,null));
         fireWaterStatisticsVO.setLandGetWater(
                 fireWaterMapper.selectCountByWaterNature(null,null,"地上",startTime,endTime,null));
-        Integer total =fireWaterStatisticsVO.getMunicipalGetWater()+fireWaterStatisticsVO.getLandGetWater();
-        fireWaterStatisticsVO.setMunicipalGetWaterRadio(fireWaterStatisticsVO.getMunicipalGetWater()/total.doubleValue());
-        fireWaterStatisticsVO.setLandGetWaterRadio(fireWaterStatisticsVO.getLandGetWater()/total.doubleValue());
+        Integer total =fireWaterMapper.selectCountByWaterNature(null,null,null,startTime,endTime,null);
+        fireWaterStatisticsVO.setMunicipalGetWaterRadio(Arith.div(fireWaterStatisticsVO.getMunicipalGetWater(),total));
+        fireWaterStatisticsVO.setLandGetWaterRadio(Arith.div(fireWaterStatisticsVO.getLandGetWater(),total));
         Integer waterIntact = fireWaterMapper.selectCountByWaterNature(null, null, null, startTime, endTime, "1");
-        fireWaterStatisticsVO.setWaterIntact(waterIntact/total.doubleValue());
+        fireWaterStatisticsVO.setWaterIntact(Arith.div(waterIntact,total));
         return fireWaterStatisticsVO;
     }
 

+ 2 - 3
mhfire-service/src/main/java/com/bizmatics/mhfire/service/impl/ReportComplaintServiceImpl.java

@@ -3,6 +3,7 @@ package com.bizmatics.mhfire.service.impl;
 import com.baomidou.mybatisplus.extension.api.R;
 import com.bizmatics.mhfire.persistence.mapper.ReportComplaintMapper;
 import com.bizmatics.mhfire.service.ReportComplaintService;
+import com.bizmatics.mhfire.service.util.Arith;
 import com.bizmatics.mhfire.service.vo.ReportComplaintVO;
 import com.bizmatics.mhfire.service.vo.ReportStatisticsVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,9 +37,7 @@ public class ReportComplaintServiceImpl implements ReportComplaintService {
         reportStatisticsVo.setConcludeNumber(fireCount+concludeCount);
         reportStatisticsVo.setCheckNumber(count - fireCount - concludeCount);
         Integer satisfactionRateNumber = reportComplaintMapper.selectCount(null, null, null, null, "3");
-
-        BigDecimal b = BigDecimal.valueOf(satisfactionRateNumber/count.doubleValue());
-        reportStatisticsVo.setSatisfactionRate(b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
+        reportStatisticsVo.setSatisfactionRate(Arith.div(satisfactionRateNumber,count));
         return reportStatisticsVo;
     }
 

+ 67 - 0
mhfire-service/src/main/java/com/bizmatics/mhfire/service/util/Arith.java

@@ -0,0 +1,67 @@
+package com.bizmatics.mhfire.service.util;
+
+import java.math.BigDecimal;
+
+/**
+ * @author yq
+ * @date 2021/6/8 9:12
+ */
+public class Arith {
+
+
+    //默认除法运算精度
+    private static final int DEF_DIV_SCALE = 4;
+
+    /**
+     * //构造器私有,让这个类不能实例化
+     */
+    private Arith(){}
+
+    /**
+     * 加法
+     * @param v1
+     * @param v2
+     * @return
+     */
+    public static double add(double v1,double v2){
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.add(b2).doubleValue();
+    }
+
+    /**
+     * 减法
+     * @param v1
+     * @param v2
+     * @return
+     */
+    public static double sub(double v1,double v2){
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.subtract(b2).doubleValue();
+    }
+
+    /**
+     * 乘法
+     * @param v1
+     * @param v2
+     * @return
+     */
+    public static double mul(double v1,double v2){
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.multiply(b2).doubleValue();
+    }
+
+    /**
+     * 除法
+     * @param v1
+     * @param v2
+     * @return
+     */
+    public static double div(double v1,double v2){
+        BigDecimal b1 = BigDecimal.valueOf(v1);
+        BigDecimal b2 = BigDecimal.valueOf(v2);
+        return b1.divide(b2,DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+}