2016-04-14 177 views
3

我在尝试修复简单的C#代码时遇到了问题。这里的代码:未处理的异常:System.FormatException

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(字符串str的NumberStyles选项,NumberBuffer &数的NumberFormatInfo信息,布尔parseDecimal) 在System.Number.ParseInt32(字符串s的NumberStyles风格的NumberFormatInfo信息) 在System.Convert.ToInt32(字符串在.... 2015值) 在MoonGravity.MoonGravity.Main(字串[] args)\项目\ ConsoleApplication3 \ ConsoleApplication3 \的Program.cs:行13

我知道问题来自于我Convert.ToInt32和我试图解决它,但我不能。感谢您的帮助。

回答

2

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

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

'Convert.ToSingle(...)',而不是'(浮动)转换.ToDouble(...)' –

0

下面行不正确:

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

(意为“整体”来自于拉丁文整数)是一个数字, 可以没有小数部分被写入的整数。例如,21,4,0​​, 和-2048是整数,而9.75,5/2和√2不是。

变化为十进制,双或浮动

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

如果您希望能够输入非整数,执行不同的转换。在.NET中还提供了一些方法,它将尝试将输入解析为另一种类型,如果成功则返回布尔值,而不是抛出异常。使用尝试解析在引入用户输入时特别方便,并且您不知道他们可能会尝试给您提供什么。然后,您可以从容地处理可能的条件是不正确或无效的输入被赋予的,而不是受凉格式异常,等 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."); 
     } 
    } 
+0

@DmitryBychenko更新,谢谢指出。需要得到我的咖啡! – davidallyoung