Урок 16. Конвертация строк в числа на C#


Все уроки по C# расположены здесь.

На данном уроке мы объединим типы данных, которые обсуждали до сих пор. Мы поговорим о преобразовании строковых значений в числовые типы. Это необходимо, например, тогда, когда пользователь может вводить любые данные, но требуется работать с ними как с числовыми.

Преобразование строк в числовые типы данных

Входные данные часто предоставляются с использованием текстовых полей; введенная информация будет представлять собой строку. Если текстовое поле используется, чтобы указать число, строка может потребовать преобразования в числовой тип данных.

На одном из предыдущих уроков мы обсудили явное и неявное преобразование между числовыми типами с помощью функций приведения. Приведение недоступно при преобразовании между строками и числовыми значениями. Вместо этого Платформа .NET framework предоставляет класс 'Convert', специально разработанный для преобразования собственных типов. Числовые типы также предоставляют методы для разбора строк.

Класс Convert

Класс Convert находится в пространстве имен System. Он обеспечивает конвертацию с помощью статических методов. статические методы вызываются без предварительного создания объекта. Другими словами, вам не нужно создавать объект Convert для доступа к требуемым методам.

.NET структура и ключевые слова C#

Одна из сложностей при использовании класса Convert заключается в том, что собственные типы данных C# называются по-другому, чем базовые структуры .NET framework. В следующей таблице перечислены числовые и логические типы данных, описанные в учебнике, и соответствующие имена .NET. Класс Convert использует имена .NET с учетом регистра.



Синтаксис Convert

Статические методы преобразования используют стандартизированный синтаксис. Имя метода начинается с " To ", за которым следует желаемое имя типа данных .NET. Например, чтобы преобразовать строку в float, вызываем метод с названием Convert.ToSingle. Строковое значение, которое необходимо преобразовать, предоставляется в качестве параметра.

// string -> integer
int stringToInt = Convert.ToInt32("25");
 
// string -> decimal
decimal stringToDecimal = Convert.ToDecimal("25.5");
 
// Booleans может быть конвертирован тоже
bool stringToBoolean = Convert.ToBoolean("true");
Примечание: метод Convert может быть использован без ссылки на пространство имен System, поскольку Visual автоматически включает следующую строку в верхней части файла кода

using System;
С помощью этого оператор сообщает компилятору, какие пространства имен следует искать автоматически. Без этой команды необходимо включать пространство имен. Поскольку пространства имен могут иметь длинные имена, это может быть трудно читать. Без директивы using код будет

int stringToInt = System.Convert.ToInt32("25");
Числовые преобразования с Convert

Класс Convert также может использоваться для преобразования между числовыми типами. Если число с плавающей точкой преобразуется в целое число, то результат округляется до ближайшего целого числа.. Однако, в отличие от стандартных правил математического округления, если число с плавающей запятой находится ровно на полпути между двумя целыми числами, возвращается ближайшее четное число.

decimal originalValue = 25.5M;
int converted = Convert.ToInt32(originalValue);     // Результат 26
int casted = (int)originalValue;                    // Результат 25
Метод Parse

Также можно конвертировать строки в числа с помощью метода Parse. Это обеспечивает дополнительную гибкость, позволяя разработчику указать стиль преобразовываемого числа. Например, разрешение использования валютных символов или шестнадцатеричных чисел.

Метод Parse является перегруженным, это означает, что существует несколько способов для вызова метода, каждый с различными параметрами. Мы рассмотрим два вида перегрузок в этой статье. Первый принимает один параметр string, содержащий строку для преобразования

string toConvert = "100";
int convertedInt = int.Parse(toConvert);            // Результат 100
float convertedFloat = float.Parse(toConvert);      // Результат 100.0
Использование числовых стилей (Number Styles)

Простой способ вызова Parse, описанный выше, имеет недостаток. Строка должна содержать только цифры. Число, например "£10,000 " вызывает исключение при анализе. Чтобы избежать этого, можно добавить второй параметр для определения допустимых стилей чисел для содержимого строки. Framework обеспечивает перечисление на допустимое количество стилей. Перечисление - это особый тип значения, который содержит именованный набор доступных значений. Перечисления будут подробно описаны дале.

Перечисление NumberStyles определено в System.Globalization. Чтобы избежать необходимости вводить System.Globalization перед каждой ссылкой на numberstyles добавьте директиву using в начало файла кода.

using System.Globalization;
Теперь мы можем использовать NumberStyles перечисления в качестве второго параметра метода Parse.

// Преобразования, включая разделитель тысяч
int thousands = int.Parse("1,000", NumberStyles.AllowThousands);
 
// Преобразование значения в том числе десятичной точки
float withDecimal = float.Parse("5.50", NumberStyles.AllowDecimalPoint);
 
// Преобразование значения в том числе и символ валюты
int withCurrency = int.Parse("£5", NumberStyles.AllowCurrencySymbol);
Значения перечисления NumberStyles могут быть объединены с помощью оператора OR ( | ), что позволяет использовать несколько стилей. Например

float multiple = float.Parse("£5.50", NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);
Перечисление содержит некоторые предопределенные стили. В приведенном выше примере для преобразования значения валюты использовались два стиля. Мы можем использовать опцию валюты из перечисления NumberStyles, чтобы разрешить эти стили и многое другое.

float money = float.Parse("£9,999.99", NumberStyles.Currency);
Интернационализация

.NET framework включает в себя большой объем функций, связанных с интернационализацией. Это просто означает, что возможна разработка программного обеспечения для пользователей по всему миру, с использованием своих локальных настроек для чисел, валют, языков и т.д. Это сложная тема и выходит за рамки текущего учебника по основам языка C#. Вообще говоря, для числовых преобразований вы можете использовать приведенные выше числовые стили для локальных настроек.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегистатьи IT, Уроки по си шарп, си шарп, конвертация




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Разбор ошибок валидации сайта
Заменитель прошлого
Игра в хаос и треугольник Серпинского на C#