从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
相关产品推荐
相关产品推荐

