You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:22:53