C#使用double.Parse读取控制台输入报System.FormatException错误如何解决
问题原因
- 核心触发原因:
double.Parse默认采用当前操作系统的区域文化规则解析字符串,若你的系统区域设置中小数分隔符不是.(例如德语、法语等区域默认使用逗号,作为小数分隔符),输入25.5这类带点的浮点数就会触发格式不匹配异常。 - 其他可能原因:输入携带多余的前后空格、输入为空、输入混入非数字字符也会触发该异常。
解决方案
方案1:固定使用不变文化解析(最通用,适配带.的浮点数输入)
指定解析时使用不随系统区域变化的CultureInfo.InvariantCulture,保证.始终被识别为小数分隔符,同时添加Trim()处理前后空格:
using System.Globalization; // 需要额外引入该命名空间 double[] milad = new double[5]; for (int i = 0; i < milad.Length; i++) { milad[i] = double.Parse(Console.ReadLine().Trim(), CultureInfo.InvariantCulture); }
方案2:使用TryParse做容错处理,避免程序直接崩溃
如果要兼容用户输入错误的场景,改用double.TryParse做合法性校验,解析失败时提示重新输入:
using System.Globalization; double[] milad = new double[5]; for (int i = 0; i < milad.Length; i++) { string input = Console.ReadLine().Trim(); // 解析失败循环提示重新输入 while (!double.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out milad[i])) { Console.WriteLine("输入格式错误,请输入以.为小数分隔符的合法浮点数,重新输入:"); input = Console.ReadLine().Trim(); } }
方案3:适配当前系统区域规则
如果不需要跨区域运行,也可以按照当前系统的小数分隔符规则输入,例如系统默认分隔符为逗号时,输入25,5即可正常解析。
内容的提问来源于stack exchange,提问作者Milad-sh
相关产品推荐
相关产品推荐

