解决精度问题

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