2014-10-27 3 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

Что вы вошли в консоль? –

+6

Является ли 23.4 целым числом? – Servy

+0

Простите меня, я забыл указать, какой ввод не работает :(ОБНОВЛЕНО сейчас. –

ответ

4

23.4 не является целым числом, поэтому вы не можете использовать int.Parse (или int.TryParse). Вместо этого вы должны проанализировать его до десятичного числа, например decimal или double. Вы можете использовать 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."); 
} 

Update от ваших комментариев я могу видеть, что вы хотите отобразить целое число.

Вы можете использовать (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

Вы должны использовать double или float для рациональных чисел:

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

Почему это было downvoted ?! – mihai

+0

Это был не я, я на самом деле поддержал его. –

1

Вы можете возвратить целую часть вашей входной строки (3,6 становится 3, например), как это:

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