未处理的异常:System.FormatException
Posted
技术标签:
【中文标题】未处理的异常:System.FormatException【英文标题】:Unhandled Exception: System.FormatException 【发布时间】:2016-04-14 13:33:44 【问题描述】:我在尝试修复简单的 C# 代码时遇到了麻烦。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MoonGravity
class MoonGravity
static void Main(string[] args)
int number = Convert.ToInt32(Console.ReadLine());
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
我需要它来输出单个浮点值,并且所有值必须在浮点之后精确到 3 位精度。我让它工作,唯一的问题是如果我不输入一个整数它会崩溃。这就是我得到的错误。
:输入字符串的格式不正确。 在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 在 System.Number.ParseInt32(String s,NumberStyles 样式,NumberFormatInfo 信息) 在 System.Convert.ToInt32(字符串值) 在 MoonGravity.MoonGravity.Main(String[] args) in .... 2015\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs:line 13
我知道问题来自我的Convert.ToInt32
,我试图修复它,但我不能。谢谢你的帮助。
【问题讨论】:
【参考方案1】:如果您希望能够输入非整数,请执行不同的转换。 .NET 中还提供了一些方法,它们将尝试将输入解析为另一种类型,并在成功时为您返回布尔值,而不是抛出异常。在引入用户输入并且您不知道他们可能会尝试给您什么时,使用 try parse 特别方便。然后,您可以优雅地处理给出错误或无效输入的可能情况,而不是捕获格式异常等。 MSDN Single Try Parse
static void Main(string[] args)
float number;
var success = Single.TryParse(Console.ReadLine(), number);
if(success)
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
else
Console.WriteLine("Only numbers allowed.");
【讨论】:
@DmitryBychenko 已更新,感谢您指出这一点。需要我的咖啡!【参考方案2】:那是因为您的number
是int
。尝试将其更改为float
。
float number = (float)Convert.ToDouble(Console.ReadLine());
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));
【讨论】:
Convert.ToSingle(...)
而不是 (float) Convert.ToDouble(...)
【参考方案3】:
下面一行不正确:
int number = Convert.ToInt32(Console.ReadLine());
整数(来自拉丁整数,意思是“整数”)是一个数 可以写成没有小数部分。例如,21、4、0、 和 -2048 是整数,而 9.75、5 1⁄2 和 √2 不是。
将其更改为十进制、双精度或浮点数
decimal number = Convert.ToDecimal(Console.ReadLine());
【讨论】:
以上是关于未处理的异常:System.FormatException的主要内容,如果未能解决你的问题,请参考以下文章
SQL 异常未处理 - System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常