精度调整

This commit is contained in:
wangshilong 2024-12-09 11:41:11 +08:00
parent 18d1c67b43
commit 119e854f11
1 changed files with 17 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import cn.hutool.core.map.MapUtil;
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@ -29,14 +30,28 @@ public class FactorDecodeHandler implements DecodeHandler {
@Override
public String decode(Map<String, Object> commandPointMap, String value) {
String factorStr = MapUtil.getStr(commandPointMap, "factor");
if (StringUtils.isNotBlank(factorStr) && NumberUtils.isCreatable(value)) {
BigDecimal factor = new BigDecimal(factorStr);
BigDecimal numberValue = new BigDecimal(value);
int precision = MapUtil.getInt(commandPointMap, "precision", 0);
switch (factor.compareTo(BigDecimal.ZERO)) {
case -1 -> {
return numberValue.multiply(factor.abs()).toString();
}
case 1 -> {
return numberValue.divide(factor, precision, RoundingMode.HALF_UP).toString();
}
}
}
return value;
}
@Override
public void decode(Map<String, Object> commandPointMap, ModbusMessage.MessagePoint point) {
point.setValue(this.decode(commandPointMap, point.getParseValue()));
point.setValue(point.getParseValue());
String factorStr = MapUtil.getStr(commandPointMap, "factor");
if (StringUtils.isNotBlank(factorStr) && StringUtils.isNotBlank(point.getParseValue())) {
if (StringUtils.isNotBlank(factorStr) && NumberUtils.isCreatable(point.getParseValue())) {
BigDecimal factor = new BigDecimal(factorStr);
BigDecimal value = new BigDecimal(point.getValue());
int precision = MapUtil.getInt(commandPointMap, "precision", 0);