为何使用指定C#代码读取小数时抛出FormatException异常?
问题原因及解决办法
抛出FormatException的核心原因是输入格式与当前系统的区域文化设置不匹配,或者输入内容本身不是有效的小数格式,具体分两种情况:
1. 区域文化的小数分隔符差异
double.Parse默认遵循当前线程的区域文化规则解析输入。比如:
- 中文(中国)区域系统默认用**句号(.)**做小数分隔符,若你输入了逗号分隔的小数(如
3,14),就会解析失败; - 欧洲部分区域(如德国)默认用逗号做小数分隔符,输入
3.14同样会触发异常。
2. 输入内容无效
如果输入包含非数字字符(正负号、合法小数分隔符除外),或者存在多个小数分隔符(如3.14.5),也会直接抛出格式异常。
解决办法
方法一:指定固定解析规则(推荐)
使用InvariantCulture强制以句号作为小数分隔符解析,不受系统区域影响:
double number = double.Parse(Console.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); Console.WriteLine($"{number:0.00}");
方法二:添加容错处理
用double.TryParse替代Parse,避免直接抛出异常,还能给用户错误提示:
if (double.TryParse(Console.ReadLine(), System.Globalization.CultureInfo.InvariantCulture, out double number)) { Console.WriteLine($"{number:0.00}"); } else { Console.WriteLine("输入格式错误,请输入有效的小数(如3.14)"); }
方法三:匹配系统区域格式
确保输入符合当前系统的小数分隔规则,比如中文系统输入3.14,欧洲区域系统输入3,14。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

