【问题标题】:Unhandled Exception: System.FormatException未处理的异常: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.FormatException:输入字符串的格式不正确。 在 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,我试图修复它,但我不能。谢谢你的帮助。

【问题讨论】:

    标签: c#


    【解决方案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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多