输入带逗号的小数触发System.FormatException错误的技术问询
问题解决:输入带逗号的小数时抛出FormatException错误
问题现象
输入整数(如3、4、6)时程序运行正常,但输入带逗号的小数(如3,2、3,4)时,抛出异常:System.FormatException: 'Input string was not in a correct format.'
原代码
using System.Text; namespace homework4_2 { internal class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.Unicode; Console.InputEncoding = Encoding.Unicode; Console.Write("введіть число від 0-100: "); double ClientNum = (Convert.ToInt32(Console.ReadLine())); if (ClientNum <= 14) { Console.WriteLine("Твоє число в діапазоні 0-14"); } else if (ClientNum <= 35 ) { Console.WriteLine("Твоє число в діапазоні 15-35"); } else if (ClientNum <= 50) { Console.WriteLine("Твоє число в діапазоні 36-50"); } else if (ClientNum <= 50) { Console.WriteLine("Твоє число в діапазоні 51-100"); } else { Console.WriteLine("немає діапазона у якому б було твоє число"); } } } }
错误原因
- 类型转换错误:代码中使用
Convert.ToInt32()解析输入,该方法仅能处理整数格式字符串,带逗号的小数不符合整数格式,直接触发格式异常。即便改为转换double,若未指定对应文化(乌克兰语区域以逗号作为小数点分隔符),默认解析逻辑也无法识别逗号格式的小数。 - 范围判断逻辑错误:第四个
else if (ClientNum <=50)与第三个条件重复,导致51-100的范围永远不会被触发。
修正后的代码
using System; using System.Text; using System.Globalization; namespace homework4_2 { internal class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.Unicode; Console.InputEncoding = Encoding.Unicode; // 指定乌克兰语文化,适配逗号作为小数点的格式 var ukCulture = new CultureInfo("uk-UA"); Console.Write("введіть число від 0-100: "); if (double.TryParse(Console.ReadLine(), NumberStyles.Float, ukCulture, out double clientNum)) { if (clientNum <= 14) { Console.WriteLine("Твоє число в діапазоні 0-14"); } else if (clientNum <= 35) { Console.WriteLine("Твоє число в діапазоні 15-35"); } else if (clientNum <= 50) { Console.WriteLine("Твоє число в діапазоні 36-50"); } else if (clientNum <= 100) { Console.WriteLine("Твоє число в діапазоні 51-100"); } else { Console.WriteLine("немає діапазона у якому б було твоє число"); } } else { Console.WriteLine("Некоректний формат числа!"); } } } }
关键修正点
- 使用
double.TryParse()替代强制转换,同时指定乌克兰语文化(uk-UA),确保能正确解析以逗号作为小数点的小数。 TryParse可以避免输入无效格式时直接抛出异常,而是友好提示错误。- 修正范围判断逻辑,将第四个条件改为
clientNum <=100,确保51-100的范围能被正确匹配。
内容的提问来源于stack exchange,提问作者PROKA
相关产品推荐
相关产品推荐

