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

构造对象时读取文本文件double类型触发FormatException,求排查解决

嘿,这问题我熟!你触发FormatException肯定是因为文本里的数值格式不对——你说文件内容是5....,这带一堆小数点的字符串,Double.Parse()根本认不出来啊!

为啥会报错?
  • 核心原因就是你文本里的第一个字段是5....,这完全不是有效的浮点数格式:double类型只允许一个小数点(或者没有小数点),多个点直接违反了解析规则,自然就抛出异常了。
  • 另外也得留意有没有其他坑:比如数据里混了空格、字母这类非数字字符,或者你的系统区域设置里小数点分隔符不是.(不过你用逗号拆分数据,这个可能性不大,但还是可以检查下)。
怎么解决?
  • 先把文本文件改对:把5....改成合法的浮点数,比如5、5.0或者5.123这种,确保每行第一个字段都是标准格式。
  • 用更安全的解析方式:别再直接用Double.Parse()了,换成Double.TryParse(),既能避免程序崩溃,还能帮你找出哪行数据有问题:
    ArrayList Webpages = new ArrayList();
    String FileName = "Medium.txt";
    StreamReader newSR = new StreamReader(FileName);
    while (!newSR.EndOfStream)
    {
        string line = newSR.ReadLine();
        string[] data = line.Split(',');
        // 先检查数据项数量够不够
        if (data.Length < 3)
        {
            Console.WriteLine($"跳过无效行:{line},数据项不足");
            continue;
        }
        // 尝试解析,失败就输出错误信息
        if (Double.TryParse(data[0], out double pageRank) && int.TryParse(data[1], out int pageId))
        {
            Webpage newEntry = new Webpage(pageRank, pageId, data[2]);
            Webpages.Add(newEntry);
        }
        else
        {
            Console.WriteLine($"解析失败的行:{line},请检查格式");
        }
    }
    newSR.Close(); // 别忘了关闭流哦
    
  • 自动清理错误格式(可选):如果多余的小数点是输入失误,你可以在解析前先处理字符串,比如只保留第一个小数点:
    string rawRank = data[0];
    int firstDotIndex = rawRank.IndexOf('.');
    if (firstDotIndex != -1)
    {
        // 去掉第一个点之后的所有点
        rawRank = rawRank.Substring(0, firstDotIndex + 1) + rawRank.Substring(firstDotIndex + 1).Replace(".", "");
    }
    // 再用处理后的字符串去解析
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:27:05