未处理的异常:System.FormatException

时间:2016-04-14 13:33:44

标签: c#

我在尝试修复简单的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:输入字符串的格式不正确。      at 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)中...... 2015 \ Projects \ ConsoleApplication3 \ ConsoleApplication3 \ Program.cs:第13行

我知道这个问题来自我的Convert.ToInt32,我试图修复它,但我无法解决。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

如果您希望能够输入非整数,请执行其他转换。 .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.");
        }
    }

答案 1 :(得分:2)

那是因为您的numberint。尝试将其更改为float

float number = (float)Convert.ToDouble(Console.ReadLine());
float gravity = (number * 0.17f);
Console.WriteLine(gravity.ToString("F3"));

答案 2 :(得分:0)

以下行不正确:

int number = Convert.ToInt32(Console.ReadLine());
  

一个整数(来自拉丁整数,意思是“整数”)是一个数字   可以在没有小数分量的情况下编写。例如,21,4,0​​,   和-2048是整数,而9.75,5 1/2和√2不是。

将其更改为十进制,双精度或浮动

decimal number = Convert.ToDecimal(Console.ReadLine());