.NET 6中如何统计带后缀的数值字符串的小数位数?
解决带后缀数值字符串的小数位数统计问题
原方案的问题
- 正则
[^0-9.,]+无法过滤Mio.这类后缀中的点,导致无关符号残留,干扰小数位判断 - 直接将所有点替换为逗号的逻辑错误,未区分千分位分隔符和小数分隔符,无法适配不同地区的数值格式
优化方案:精准提取数值部分后统计小数位
通过正则匹配开头的合法数值结构(支持千分位分隔符),完全排除后缀干扰,再识别小数分隔符统计位数:
using System.Text.RegularExpressions; public int CountDecimals(string input) { // 匹配开头的合法数值:支持带千分位的整数/小数,兼容点/逗号分隔符 string pattern = @"^\s*(\d{1,3}(?:[.,]\d{3})*(?:[.,]\d+)?|\d+(?:[.,]\d+)?)"; Match match = Regex.Match(input, pattern); if (!match.Success) return 0; string numericPart = match.Groups[1].Value; int lastDotPos = numericPart.LastIndexOf('.'); int lastCommaPos = numericPart.LastIndexOf(','); int decimalSepPos = Math.Max(lastDotPos, lastCommaPos); if (decimalSepPos == -1) return 0; // 提取小数部分并返回长度 return numericPart.Substring(decimalSepPos + 1).Length; }
方案说明
- 正则精准匹配数值前缀,完全过滤
%、€、Mio.、million等后缀,包括后缀中的点 - 自动识别最后出现的分隔符为小数分隔符,适配
1,234.56(英文格式)或1.234,56(欧洲格式) - 处理了开头可能存在的空格,兼容更多输入场景
内容的提问来源于stack exchange,提问作者CrazyEight
相关产品推荐
相关产品推荐

