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

从double中减去int时触发“输入字符串格式不正确”错误,求排查

问题分析与解决方案

首先,你遇到的Input string was not in a correct format错误,本质是整数转换时输入的字符串不符合有效格式,但背后藏着两个关键问题:

1. 逻辑完全错误的判断条件

你写的if(otherFe != string.Empty || otherFe!= "")完全不合理——因为string.Empty和""是完全等价的,这个条件永远会返回true。不管otherFe是null、空字符串还是无效值,都会强行进入转换分支,这就直接导致了当otherFe不是有效整数字符串时,Convert.ToInt32抛出格式错误。

2. 无容错的转换方式

就算otherFe确实是你说的"600",也可能存在隐藏的空格(比如输入时不小心加了前后空格),这时候Convert.ToInt32同样会报错;而且Convert.ToInt32遇到无效值就直接抛异常,没有任何容错机制,程序很脆弱。


修复后的健壮代码示例

我给你调整成更稳妥的写法:

double TotalNoRegis = values.Sum(); // 计算结果为1569
string otherFe = "600";
double totalafter = 0; // 先初始化默认值

// 先检查字符串是否非空且不是全空白
if (!string.IsNullOrWhiteSpace(otherFe))
{
    // 用TryParse安全转换,同时去除前后空格避免意外失误
    if (int.TryParse(otherFe.Trim(), out int otherFeInt))
    {
        totalafter = TotalNoRegis - otherFeInt;
    }
    else
    {
        // 这里可以加错误处理,比如日志提示或者给用户反馈
        Console.WriteLine("输入的otherFe不是有效的整数,请检查!");
    }
}

为什么这么改?

  • string.IsNullOrWhiteSpace:一次性处理null、空字符串、全空白字符串的情况,比你原来的判断准确得多。
  • otherFe.Trim():去除字符串前后的空格、制表符等空白字符,避免因为输入时的小疏忽导致转换失败。
  • int.TryParse:不会抛出异常,而是通过返回值告诉你转换是否成功,同时把转换后的整数存入otherFeInt变量,让程序更稳定,不会因为一次无效输入就崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:41