Руководство по программированию на C#. Преобразование строки в число
Для преобразования string в число используется вызов метода Parse или TryParse , который можно найти в числовых типах ( int , long , double и т. д.), или используются методы в классе System.Convert.
Немного эффективнее и проще вызвать метод TryParse (например, int.TryParse(«11», out number) ) или метод Parse (например, var number = int.Parse(«11») ). Использование метода Convert более удобно для общих объектов, реализующих IConvertible.
Можно использовать методы Parse или TryParse в числовом типе, который предположительно содержит строка, таком как тип System.Int32. Метод Convert.ToInt32 использует Parse внутри себя. Метод Parse возвращает преобразованное число; метод TryParse возвращает логическое значение, которое указывает, успешно ли выполнено преобразование, и возвращает преобразованное число в параметр out . Если строка имеет недопустимый формат, Parse создает исключение, а TryParse возвращает значение false . В случае сбоя операции синтаксического анализа при вызове метода Parse вы всегда должны использовать обработку исключений, чтобы перехватить FormatException.
Вызов метода Parse или TryParse
Методы Parse и TryParse игнорируют пробелы в начале и в конце строки, но все остальные символы должны быть символами, которые образуют соответствующий числовой тип ( int , long , ulong , float , decimal и т. д.). Любые пробелы в строке, образующие число, приводят к ошибке. Например, можно использовать для decimal.TryParse синтаксического анализа «10», «10,3» или «10», но этот метод нельзя использовать для синтаксического анализа 10 из «10X», «1 0» (обратите внимание на внедренное пространство), «10,3» (обратите внимание на внедренное пространство), «10e1» ( float.TryParse здесь работает) и т. д. Строку со значением null или String.Empty невозможно успешно проанализировать. Вы можете проверить наличие NULL или пустой строки, прежде чем пытаться ее проанализировать, вызвав метод String.IsNullOrEmpty.
В указанном ниже примере демонстрируются успешные и неуспешные вызовы методов Parse и TryParse .
using System; public static class StringConversion < public static void Main() < string input = String.Empty; try < int result = Int32.Parse(input); Console.WriteLine(result); >catch (FormatException) < Console.WriteLine($"Unable to parse ''"); > // Output: Unable to parse '' try < int numVal = Int32.Parse("-105"); Console.WriteLine(numVal); >catch (FormatException e) < Console.WriteLine(e.Message); >// Output: -105 if (Int32.TryParse("-105", out int j)) < Console.WriteLine(j); >else < Console.WriteLine("String could not be parsed."); >// Output: -105 try < int m = Int32.Parse("abc"); >catch (FormatException e) < Console.WriteLine(e.Message); >// Output: Input string was not in a correct format. const string inputString = "abc"; if (Int32.TryParse(inputString, out int numValue)) < Console.WriteLine(numValue); >else < Console.WriteLine($"Int32.TryParse could not parse '' to an int."); > // Output: Int32.TryParse could not parse 'abc' to an int. > >
В следующем примере показан один из подходов к анализу строки, которая, как ожидается, будет включать начальные числовые символы (включая шестнадцатеричные символы) и конечные нечисловые символы. Он назначает допустимые символы в начале новой строки перед вызовом метода TryParse. Поскольку анализируемые строки содержат небольшое количество символов, в примере вызывается метод String.Concat для назначения допустимых символов новой строке. Для большей строки можете использовать класс StringBuilder.
using System; public static class StringConversion < public static void Main() < var str = " 10FFxxx"; string numericString = string.Empty; foreach (var c in str) < // Check for numeric characters (hex in this case) or leading or trailing spaces. if ((c >= '0' && c = 'A' && char.ToUpperInvariant(c) else < break; >> if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i)) < Console.WriteLine($"'' --> '' --> "); > // Output: ' 10FFxxx' --> ' 10FF' --> 4351 str = " -10FFXXX"; numericString = ""; foreach (char c in str) < // Check for numeric characters (0-9), a negative sign, or leading or trailing spaces. if ((c >= '0' && c else < break; >> if (int.TryParse(numericString, out int j)) < Console.WriteLine($"'' --> '' --> "); > // Output: ' -10FFXXX' --> ' -10' --> -10 > >
Вызов методов класса Convert
В следующей таблице перечислены некоторые методы класса Convert, которые можно использовать для преобразования строки в число.
| Числовой тип | Метод |
|---|---|
| decimal | ToDecimal(String) |
| float | ToSingle(String) |
| double | ToDouble(String) |
| short | ToInt16(String) |
| int | ToInt32(String) |
| long | ToInt64(String) |
| ushort | ToUInt16(String) |
| uint | ToUInt32(String) |
| ulong | ToUInt64(String) |
В данном примере вызывается метод Convert.ToInt32(String) для преобразования входных данных string в значение типа int. Пример перехватывает два наиболее распространенных исключения, которые могут создаваться этим методом, — FormatException и OverflowException. Если итоговое число можно увеличить, не превышая Int32.MaxValue, пример добавляет 1 к результату и отображает вывод.
using System; public class ConvertStringExample1 < static void Main(string[] args) < int numVal = -1; bool repeat = true; while (repeat) < Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): "); string? input = Console.ReadLine(); // ToInt32 can throw FormatException or OverflowException. try < numVal = Convert.ToInt32(input); if (numVal < Int32.MaxValue) < Console.WriteLine("The new value is ", ++numVal); > else < Console.WriteLine("numVal cannot be incremented beyond its current value"); >> catch (FormatException) < Console.WriteLine("Input string is not a sequence of digits."); >catch (OverflowException) < Console.WriteLine("The number cannot fit in an Int32."); >Console.Write("Go again? Y/N: "); string? go = Console.ReadLine(); if (go?.ToUpper() != "Y") < repeat = false; >> > > // Sample Output: // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473 // The new value is 474 // Go again? Y/N: y // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647 // numVal cannot be incremented beyond its current value // Go again? Y/N: y // Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000 // The new value is -999 // Go again? Y/N: n
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
В чем разница между int.Parse() и Convert.ToInt32()
int.Parse преобразует строку ( string ) в int (если может).
Convert.ToInt32 преобразует в int значение любого типа, из перечисленных здесь. boolean, double, float и т.д. А самое главное, может преобразовать экземпляр любого класса, реализующего IConvertible .
Если говорить о строках, то Convert.ToInt32 внутри всё равно использует int.Parse . Но есть нюанс:
public static int ToInt32(String value)
Для неинициализированной строки int.Parse выбросит исключение, Convert.ToInt32 вернет 0.
Объясните новичку на простом языке что делает метод Convert.ToInt32 на C#
Данный класс содержит методы позволяющие преобразовывать 1 тип в другой (Тип это: float, int и т. д). Пример:
Есть строка типа string и её надо преобразовать (грубо говоря конвертировать в другой тип) в числовой тип, дабы выполнять с ней нужные арифметические операции.
int result = 0; // Содержит результат.
string X = «1»; // Строка содержащая текст.
int F = 0; // Переменная типа int содержащая число.
int G = 10 // переменная со значением 10
F = Convert.ToInt32(X); // конвертируем переменную X типа string в тип int
result = F + G;
Console.WriteLine(result); // result: 11.
Максим ТурундаевУченик (210) 4 года назад
Не понимаю, почему int G = 10 .
Так захотел
Остальные ответы
превращает число из текста (string) в 32-битное число (int32), т. к. текст нельзя использовать в вычислениях.
он преобразует строку string в число int то есть делает из строки «123» число сто двадцать три. Разницу можно увидеть при том же сложении:
а в случае с числами типа int будет вот так:
Голова РоботаПросветленный (36308) 5 лет назад
Знаешь разницу между цифрой и числом? Цифры – это далеко не числа, это символы для записи чисел. А так как компьютер совсем не человек, то и запись числа на языке человеческой арифметики для него чужда. Вот почему нужен метод Convert.ToInt32, который «читает» понятные нам цифры и возвращает «понятный» компьютеру двоичный код числа.
Если вы сделаете не консольное, а нормальное окно с полями для ввода чисел, то ваша программа не поймет, что это числа, пока вы не примените к ним этот метод или его аналог.
«123» — для программы строка. «123» + «2» она выдаст «1232». А чтоб суммировала, надо переделать в целые числа.
Что такое Convert в C#?
В языке программирования C#, класс Convert предоставляет удобные методы для преобразования значений между различными типами данных. Это особенно полезно, когда требуется преобразование между примитивными типами данных, такими как строки, числа и даты.
Синтаксис:
// Пример использования Convert для преобразования строки в число string strNumber = "123"; int convertedNumber = Convert.ToInt32(strNumber); // Пример использования Convert для преобразования числа в строку int number = 456; string convertedString = Convert.ToString(number);