2014-10-27 57 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); 
}