未处理的异常: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】:

那是因为您的numberint。尝试将其更改为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”类型的未处理异常

如何生成未处理的 MFC 异常?

Elasticsearch未分配分片异常处理

在 mvc 中处理请求时发生未处理的异常

捕获未处理的异常

如何在未处理的任务异常上崩溃?