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