2014-10-27 27 views
0
static void Main() 
{   
    Console.Write("Please input a number: "); 
    Console.WriteLine("\n The number you selected was {0} \n", method()); 
} 

static int method() 
{ 
    int var = int.Parse(Console.ReadLine()); 
    return var; 
} 

上面的代碼拋出一個格式異常。我試圖將輸入存儲在一個字符串變量中,然後解析,但它有同樣的問題。我也嘗試使用Convert類,仍然有同樣的問題。如果有人能告訴我我錯在哪裏,我將不勝感激。int.Parse不能正常工作

我試圖轉換23.4,例如。 (它適用於自然數,但爲什麼不是4345.5,例如)

+1

什麼你有沒有進入控制檯? – 2014-10-27 16:20:08

+6

是23.4是一個整數嗎? – Servy 2014-10-27 16:21:31

+0

原諒我,我忘了把什麼輸入不工作:(現在更新。 – 2014-10-27 16:21:45

回答

4

23.4不是整數,因此您不能使用int.Parse(或int.TryParse)。相反,您必須將其解析爲十進制數字,如decimaldouble。您可以使用TryParse方法,如Double.TryParse防止異常,如果它不是一個有效的數字:從您的意見

string input = Console.ReadLine(); 
double number; 
if(double.TryParse(input.Trim(), out number)) 
{ 
    // valid number 
    Console.WriteLine("\n The number you selected was {0} \n", number); 
} 
else 
{ 
    Console.WriteLine("Please enter a real number."); 
} 

更新我可以看到你要顯示的整數。

您可以使用(int)number來獲取小數部分被簡單截斷的整數。如果你希望它被舍入,首先使用Math.Round

int integer = (int) number; // decimal part is truncated 
integer = (int) Math.Round(number, 2, MidpointRounding.AwayFromZero); // rounded to two digits 

如果你只是想顯示沒有小數部分的字符串,您還可以使用format strings.

string numberString = number.ToString("N0"); 
0

Integer32.Parse是用於解析32個整數。它不能解析不能表示爲32位整數的數字,例如23.4,並且它將在無法解析數據時拋出異常。如果您想表示非整數,請使用不同的數字表示形式。

1

您應該使用doublefloat爲有理數:

float num = float.Parse(Console.ReadLine()) 
+0

這是爲什麼downvoted?! – mihai 2014-10-27 16:29:31

+0

這不是我,我實際上upvoted。 – 2014-10-27 16:44:48

1

您可以返回你的輸入字符串的整數部分(3.6變爲3,例如)是這樣的:

static int method() 
{ 
    float var = float.Parse(Console.ReadLine()); 
    return (int)Math.Floor(var); 
}