feat(core):优化数值转换逻辑以支持科学计数法
- 移除不必要的 Nullable 注解导入- 新增 isScientificNotation 方法用于检测科学计数法格式 - 修改 Double 类型数值转换逻辑,区分科学计数法与普通数值- 对于无法转换的科学计数法数值,记录警告日志并返回原始值 - 添加详细的 JavaDoc 注释说明科学计数法判断规则
This commit is contained in:
parent
c8e2e2dc5e
commit
b4a6fdc278
@ -4,7 +4,6 @@ import cn.isliu.core.FileData;
|
|||||||
import cn.isliu.core.annotation.TableProperty;
|
import cn.isliu.core.annotation.TableProperty;
|
||||||
import cn.isliu.core.enums.BaseEnum;
|
import cn.isliu.core.enums.BaseEnum;
|
||||||
import cn.isliu.core.enums.FileType;
|
import cn.isliu.core.enums.FileType;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
@ -24,6 +23,7 @@ import java.util.stream.Collectors;
|
|||||||
public class GenerateUtil {
|
public class GenerateUtil {
|
||||||
|
|
||||||
// 使用统一的FsLogger替代java.util.logging.Logger
|
// 使用统一的FsLogger替代java.util.logging.Logger
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据配置和数据生成DTO对象(通用版本)
|
* 根据配置和数据生成DTO对象(通用版本)
|
||||||
*
|
*
|
||||||
@ -277,14 +277,18 @@ public class GenerateUtil {
|
|||||||
result = bigDecimal.stripTrailingZeros().toPlainString();
|
result = bigDecimal.stripTrailingZeros().toPlainString();
|
||||||
} else if (value instanceof Double) {
|
} else if (value instanceof Double) {
|
||||||
String stringValue = convertValue(value);
|
String stringValue = convertValue(value);
|
||||||
try {
|
|
||||||
result = String.valueOf(Long.parseLong(stringValue));
|
// 判断是否为科学计数法
|
||||||
} catch (NumberFormatException e) {
|
if (isScientificNotation(stringValue)) {
|
||||||
try {
|
try {
|
||||||
result = String.valueOf(((Double) Double.parseDouble(stringValue)).longValue());
|
result = String.valueOf(((Double) Double.parseDouble(stringValue)).longValue());
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
throw new IllegalArgumentException("无法将值 '" + stringValue + "' 转换为 long 或科学计数法表示的数值", ex);
|
FsLogger.warn("无法将科学计数法值 '" + stringValue + "' 转换为 long, 直接返回原始值");
|
||||||
|
result = stringValue;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// 不是科学计数法,直接返回原始字符串值
|
||||||
|
result = stringValue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
result = String.valueOf(value);
|
result = String.valueOf(value);
|
||||||
@ -303,6 +307,24 @@ public class GenerateUtil {
|
|||||||
return result.trim();
|
return result.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断字符串是否为科学计数法格式
|
||||||
|
* 科学计数法格式:数字 + E/e + 数字,如 1.23E+4, 1.23e-2
|
||||||
|
*
|
||||||
|
* @param value 要判断的字符串
|
||||||
|
* @return 如果是科学计数法返回true,否则返回false
|
||||||
|
*/
|
||||||
|
private static boolean isScientificNotation(String value) {
|
||||||
|
if (value == null || value.trim().isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
String trimmed = value.trim();
|
||||||
|
// 使用正则表达式匹配科学计数法格式
|
||||||
|
// 匹配格式:数字(可选小数点) + E/e + 可选正负号 + 数字
|
||||||
|
return trimmed.matches("^[+-]?\\d+(\\.\\d+)?[eE][+-]?\\d+$");
|
||||||
|
}
|
||||||
|
|
||||||
private static Object convertValue(Object value, Class<?> targetType) throws Exception {
|
private static Object convertValue(Object value, Class<?> targetType) throws Exception {
|
||||||
if (value == null) return null;
|
if (value == null) return null;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user