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

C#中字符串转Double时抛出FormatException异常求助

解决字符串转Double时的System.FormatException异常

看起来你在WinForm项目的循环里做字符串转Double操作时踩坑了,这个异常的核心原因很明确:你要转换的字符串不符合Double类型的格式规范——可能是空字符串、带了非数字字符(比如字母、中文符号)、或者用了和当前系统区域不匹配的数字分隔符(比如用中文逗号代替英文小数点)。

给你几个实用的排查和解决思路:

  • 先搞清楚到底是哪个字符串出了问题
    在调用Convert.ToDouble()的那一行(也就是你代码里的Form1.cs第52行)之前,先把要转换的字符串打印出来看看——比如用MessageBox.Show(要转换的变量名)或者输出到控制台。循环里很容易出现某一次迭代拿到的字符串不符合预期,比如空值、用户输入的无效字符,先定位到具体的坏字符串,问题就解决了一半。

  • 换成更安全的转换方式,避免抛出异常
    别再用Convert.ToDouble()这种“一出错就炸”的方法了,改用double.TryParse(),它会返回布尔值告诉你转换是否成功,不会直接抛出异常。在循环里用这个方法,你可以轻松跳过格式不对的内容,或者给用户提示。示例代码如下:

    // 假设你循环里的输入字符串是inputString
    double convertedValue;
    if (double.TryParse(inputString, out convertedValue))
    {
        // 转换成功,正常处理convertedValue
    }
    else
    {
        // 转换失败,这里可以提示用户,或者跳过当前循环
        MessageBox.Show($"抱歉,「{inputString}」不是有效的数字格式");
        continue; // 跳过这次循环,继续处理下一个
    }
    
  • 如果是区域格式问题,指定解析的文化信息
    有时候你拿到的数字字符串是其他地区的格式(比如欧洲用逗号当小数点,而你的系统是中文环境用点),这时候可以指定CultureInfo来解析。比如要解析法国格式的数字:

    string frenchNumber = "123,45";
    double result;
    if (double.TryParse(frenchNumber, NumberStyles.Float | NumberStyles.AllowThousands, 
                        new CultureInfo("fr-FR"), out result))
    {
        // 转换后result是123.45
    }
    

附上你遇到的异常信息:

System.FormatException HResult=0x80131537 Message=输入字符串格式不正确。Source=mscorlib StackTrace: at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) at System.Convert.ToDouble(String value) at WindowsFormsApp6.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\King\source\repos\WindowsFormsApp6\WindowsFormsApp6\Form1.cs:line 52 at System....

内容的提问来源于stack exchange,提问作者Dan King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:15