精度调整
This commit is contained in:
parent
18d1c67b43
commit
119e854f11
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue