2016-04-14 199 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