C#中如何用正则提取大数字的全部数字?规避科学计数法截断
解决C#中提取超大数字完整数字的问题
问题根源
你遇到的截断和四舍五入问题,本质是超大数值无法被C#的数值类型(如double、decimal)精确存储。当你直接把99999999999995555555555555555555555559999.98当作数值处理时,系统会自动将其近似为有限精度的科学计数法数值,调用ToString()后已经丢失了原始数字的大部分信息,正则匹配自然无法得到完整结果。
正确解决方案
必须从原始字符串入手处理,避免将超大值转为数值类型,直接提取字符串中的所有数字字符:
代码示例
// 原始超大数字以字符串形式保存,避免精度丢失 string originalNumStr = "99999999999995555555555555555555555559999.98"; // 提取所有数字字符并拼接成目标结果 string targetResult = string.Concat(System.Text.RegularExpressions.Regex.Matches(originalNumStr, @"\d") .Cast<System.Text.RegularExpressions.Match>() .Select(match => match.Value)); Console.WriteLine(targetResult); // 输出:9999999999999555555555555555555555555999998
关键说明
- 不要尝试用数值类型存储超出其精度范围的超大数字:double的有效数字仅15-17位,decimal最多28-29位,你的原始数字远超出这个范围,必然会丢失精度。
- 直接对原始字符串操作是唯一能保留所有数字信息的方式,通过正则匹配所有
\d字符并拼接,即可得到目标结果。
内容的提问来源于stack exchange,提问作者GeorgeR
相关产品推荐
相关产品推荐

