VirQ. Приведение строкового типа к целому или дробному в C#
Язык C# входит в ТОП-5
самых популярных языков
программирования
Главная / Приведение типов /
Приведение строкового типа к целому или дробному
Статей на сайте: 61

Приведение строкового типа к целому или дробному


Скажем, например, через консоль человек вводит числа. Вводит он всегда строки, даже если ввёл, скажем, число 12. Для начала, чтобы было понятнее, приведу пример:
[code] Console.WriteLine("Введите 1 число"); string s1 = Console.ReadLine(); //Например, вы ввели '11' Console.WriteLine("Введите 2 число"); string s2 = Console.ReadLine(); //Например, вы ввели '7' Console.WriteLine(s1 + s2); //Результат: 117 Console.ReadKey(); [/code]
И при попытке сложить 2 числа (скажем, ввели 11 и 7) мы получим не 18, а 117!
Console
×
Введите 1 число
11
Введите 2 число
7
117

Дело в том, что компьютер 11 и 7 воспринимает как строки и просто ставит их рядом. Вот и получается 117.
[code] string s = "10"; //Это строка int s = 10; //Это число [/code]
Для этого нам надо извлечь числа из строк:
[code] Console.WriteLine("Введите 1 число"); string s1 = Console.ReadLine(); //Например, вы ввели '11' int n1 = int.Parse(s1); Console.WriteLine("Введите 2 число"); string s2 = Console.ReadLine(); //Например, вы ввели '7' int n2 = int.Parse(s2); Console.WriteLine(n1 + n2); //Результат: 18 Console.ReadKey(); [/code]
Console
×
Введите 1 число
11
Введите 2 число
7
18

Вот теперь мы получили нужный результат. Однако если ввести не число, а что-то, типа "k288ak192", то будет ошибка в следующей строке
[code] int n1 = int.Parse(s1); //Тут [/code]
Выглядеть это будет так:


Для того, чтобы не было внезапного обрыва программы, проверку мы сделаем так:
[code] Console.WriteLine("Введите 1 число"); string s1 = Console.ReadLine(); //Например, вы ввели '11' int n1 = 0; //в n1 будет записан результат, по умолчанию выставляется 0 bool b1 = int.TryParse(s1, out n1); //Если успешно, то n1 будет = 11 Console.WriteLine("Введите 2 число"); string s2 = Console.ReadLine(); //Например, вы ввели '7' int n2 = 0; //в n2 будет записан результат, по умолчанию выставляется 0 bool b2 = int.TryParse(s2, out n2); //Если успешно, то n2 будет = 7 if (b1 && b2) Console.WriteLine(n1 + n2); //Если ошибок нет (b1 == true и b2 == true), тогда результат 18 else Console.WriteLine("Одно из чисел было введено не как число"); [/code]
Ну вот соответственно результат, если ввести не число:
Console
×
Введите 1 число
11
Введите 2 число
dghda
Одно из чисел было введено не как число

Здесь сперва создаётся число n1 = 0
Далее функция int.TryParse пытается конвертировать строку s1 в число n1. Если это реально число, скажем строка "11" может быть числом 11, тогда в n1 записывается 11, а в b1 записывается True (что означает - успешно).
То же самое происходит с s2 (входная строка), n2(получаемое число), b2(результат да/нет).
А далее идёт проверка, если b1 и b2 дали положительный результат, тогда вывести сумму этих чисел, иначе вывести сообщение об ошибке.
Если число конвертированию не подлежит, то оно равно 0.
Мы введём 11 и dghda. В результате получим 11, т.е. 11+0.

Для конвертирования дробного числа int.TryParse работать не будет. Необходимо использовать double.TryParse
[code] Console.WriteLine("Введите 1 число"); string s1 = Console.ReadLine(); //Например, вы ввели '11,6' double n1 = double.Parse(s1); [/code]
Но и тут может быть ошибка, если double.Parse примет не число, например: "abcd", "34.6.1".
Кстати, если операционная система у вас в качестве разделителя целых и дробных использует запятую, то и вводить надо число через запятую.
Console
×
Введите 1 число
4,6

Ну а чтобы программа продолжала работу при неверном вводе и не "вылетала", лучше использовать такой код (заменить метод Parse на TryParse):
[code] Console.WriteLine("Введите 1 число"); string s1 = Console.ReadLine(); double n1 = 0; double.TryParse(s1,out n1); //Тогда в n1 будет либо число (получилось), либо 0 (не получилось) [/code]

Дополнительная информация о том, как вывести результат в консоли или WinForm