diff --git a/src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java b/src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java index 94e7362..2a45bda 100644 --- a/src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java +++ b/src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java @@ -20,6 +20,7 @@ import org.springframework.stereotype.Component; import jakarta.annotation.Resource; import java.io.IOException; +import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -171,15 +172,26 @@ public class KingIOServerService { //Process the number value. keep 4 ecimal places if (value instanceof Number) { - DecimalFormat df = new DecimalFormat("#.####"); // 保留四位小数的格式 - String formatted = df.format((Number)value); - value = Double.parseDouble(formatted); - }else if (value instanceof Boolean){ - if((Boolean)value==true){ - value = 1; - }else{ - value = 0; + Number num = (Number) value; + double d = num.doubleValue(); + + // 判断是否为整数(且不是无穷大或 NaN) + if (d == Math.floor(d) && !Double.isInfinite(d) && !Double.isNaN(d)) { + // 检查是否在 int 范围内 + if (d >= Integer.MIN_VALUE && d <= Integer.MAX_VALUE) { + value = Integer.valueOf((int) d); + } else { + value = Integer.valueOf((int) d); // 注意:超范围会溢出! + } + } else { + // 非整数:格式化保留最多4位小数 + DecimalFormat df = new DecimalFormat("#.####"); + df.setRoundingMode(RoundingMode.HALF_UP); + String formatted = df.format(d); + value = Double.parseDouble(formatted); } + } else if (value instanceof Boolean) { + value = (Boolean) value ? 1 : 0; } // 输出数据解读 diff --git a/src/main/java/com/techsor/datacenter/sender/service/TrendLogService.java b/src/main/java/com/techsor/datacenter/sender/service/TrendLogService.java index 8cf280a..3b7d5a8 100644 --- a/src/main/java/com/techsor/datacenter/sender/service/TrendLogService.java +++ b/src/main/java/com/techsor/datacenter/sender/service/TrendLogService.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; +import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -151,15 +152,26 @@ public class TrendLogService { //Process the number value. keep 4 ecimal places if (value instanceof Number) { - DecimalFormat df = new DecimalFormat("#.####"); // 保留四位小数的格式 - String formatted = df.format((Number)value); - value = Double.parseDouble(formatted); - }else if (value instanceof Boolean){ - if((Boolean)value==true){ - value = 1; - }else{ - value = 0; + Number num = (Number) value; + double d = num.doubleValue(); + + // 判断是否为整数(且不是无穷大或 NaN) + if (d == Math.floor(d) && !Double.isInfinite(d) && !Double.isNaN(d)) { + // 检查是否在 int 范围内 + if (d >= Integer.MIN_VALUE && d <= Integer.MAX_VALUE) { + value = Integer.valueOf((int) d); + } else { + value = Integer.valueOf((int) d); // 注意:超范围会溢出! + } + } else { + // 非整数:格式化保留最多4位小数 + DecimalFormat df = new DecimalFormat("#.####"); + df.setRoundingMode(RoundingMode.HALF_UP); + String formatted = df.format(d); + value = Double.parseDouble(formatted); } + } else if (value instanceof Boolean) { + value = (Boolean) value ? 1 : 0; } // 输出数据解读