解决精度问题

This commit is contained in:
wr
2025-03-14 16:32:47 +08:00
parent 751dc56568
commit d084950090

View File

@@ -1080,11 +1080,13 @@ public class DetectionServiceImpl {
BigDecimal.valueOf(1.0 / data * (channelData + errSysDtl.getMaxErrorValue()))) BigDecimal.valueOf(1.0 / data * (channelData + errSysDtl.getMaxErrorValue())))
).collect(Collectors.toList()); ).collect(Collectors.toList());
if (CollUtil.isNotEmpty(qualifiedList)) { if (CollUtil.isNotEmpty(qualifiedList)) {
Double a = qualifiedList.get(0) - (1.0 / data * (channelData - errSysDtl.getMaxErrorValue())); BigDecimal subtract = BigDecimal.valueOf(qualifiedList.get(0))
detectionData.setErrorData(BigDecimal.valueOf(Math.abs(a))); .subtract(BigDecimal.valueOf(1.0 / data * (channelData - errSysDtl.getMaxErrorValue())));
detectionData.setErrorData(subtract);
} else { } else {
Double a = list.get(0) - (1.0 / data * (channelData - errSysDtl.getMaxErrorValue())); BigDecimal subtract = BigDecimal.valueOf(list.get(0))
detectionData.setErrorData(BigDecimal.valueOf(Math.abs(a))); .subtract(BigDecimal.valueOf(1.0 / data * (channelData - errSysDtl.getMaxErrorValue())));
detectionData.setErrorData(subtract);
} }
isData(dataRule, qualifiedList, detectionData, qualifiedList); isData(dataRule, qualifiedList, detectionData, qualifiedList);
} }
@@ -1142,18 +1144,19 @@ public class DetectionServiceImpl {
* @return * @return
*/ */
public BigDecimal devSubtractChannelData(Double devData, Double channelData, Integer errorValueType) { public BigDecimal devSubtractChannelData(Double devData, Double channelData, Integer errorValueType) {
if (devData - channelData != 0) { BigDecimal subtract = BigDecimal.valueOf(devData).subtract(BigDecimal.valueOf(channelData));
if (subtract.doubleValue() != 0) {
switch (errorValueType) { switch (errorValueType) {
case 2: case 2:
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/下发的幅值 //下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/下发的幅值
return BigDecimal.valueOf(devData - channelData) return subtract
.divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP);
case 3: case 3:
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/装置返回值 //下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/装置返回值
return BigDecimal.valueOf(devData - channelData) return subtract
.divide(BigDecimal.valueOf(devData), 4, RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(devData), 4, RoundingMode.HALF_UP);
} }
return BigDecimal.valueOf(devData - channelData); return subtract;
} }
return BigDecimal.valueOf(0); return BigDecimal.valueOf(0);
} }