如何修复格式为字符串的小数列中的格式错误?
优化方案
你的当前代码仅能处理连续两个小数点的情况,但像.2.9这类非连续多小数点、首尾带点的格式错误无法覆盖,且嵌套if逻辑可以进一步简化。这里提供更健壮且简洁的处理方式:
核心思路
- 优先处理空值,直接返回
DBNull.Value - 对输入字符串做标准化清洗:
- 去除字符串首尾的小数点
- 将字符串中所有连续的多个小数点替换为单个
- 尝试解析清洗后的字符串,确保覆盖所有提到的异常格式
优化后代码
case int n when n >= 50 && n <= 57: if (value == null) return DBNull.Value; string cleanedValue = value.ToString().Trim('.'); // 循环替换直到没有连续小数点,处理"2...9"这类多连续点的情况 while (cleanedValue.Contains("..")) { cleanedValue = cleanedValue.Replace("..", "."); } return double.TryParse(cleanedValue, out double result) ? result : DBNull.Value; // 可根据业务需求调整兜底逻辑,比如返回默认值或抛出异常
优势说明
- 全面覆盖异常格式:
.2.9清洗后变为2.9,2..9变为2.9,2.9.变为2.9,甚至2...9也能处理成2.9 - 逻辑拆分清晰:将清洗和解析步骤分离,代码可读性更强
- 增加兜底逻辑:避免极端格式导致的转换失败报错,提升代码稳定性
内容的提问来源于stack exchange,提问作者wwhitman
相关产品推荐
相关产品推荐

