Главная » C# » Анализ и обработка чисел в Visual C# (Sharp)

0

Региональные  стандарты  и  страна  играют  важную  роль  при  обработке  чисел и дат, которые хранятся в виде строк. Представьте себе выполнение  сложения чисел, хранящихся  в  виде  строк.  Пример  такого  сложения  продемонстрирован на рис. 3.12.

Рис. 3.12. Результаты арифметических операций с числами, хранящимися в виде строк, могут быть неожиданными

Сложение чисел представляет собой арифметическую операцию. Но при сложении строк выполняется операция конкатенации, т. е. сращивание одной строки с дрой. Использование операции сложения со строками представляет удобный способ для конкатенации строк.

Но в данном примере конкатенация не была целью сложения. Чтобы получить жаемый результат, нам нужно обращаться со строками, как с числами, над котори потом и выполняется операция сложения, а результат — 3(1+ 2 = 3) — сохряется в переменной с. Исправленный код для получения желаемого результата показан на рис. 3.13. Этот код использует метод .NET, чтобы сопоставить строкому представлению цифры соответствующее числовое представление.

Тип int имеет метод Parse о, с помощью которого можно преобразовать строкое представление числа в его числовой эквивалент. Метод работает должным оазом, только если строка содержит допустимое представление числа. Иными слами, строка может содержать только цифры, но не буквы или, за  исключением знака "плюс" или "минус", другие символы. В последнем случае метод Parse о вает ошибку.

Рис. 3.13. Сопоставление строк числам

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

int value;

i f(int.TryParse("1", out value)) С

}

Метод TryParse () возвращает не соответствующее целочисленное значение, а булев флаг, указывающий, поддается ли строка преобразованию. Если возвращается значие true, то тогда строка преобразуется, а результат сохраняется в параметре value, обозначенном идентификатором out. Идентификатор out указывает, что результаты проверки  сохраняются  в  следующем  за  ним  параметре:  преобразованное  значение  в случае успеха или 0 в противном случае. С помощью метода TryParse () можно преобразовывать другие числовые типы, например float .TryParse ().

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

using System.Globalization;

public void ParseHexadecimal() {

int value = int. Parse (" 100" , NumberStyles .HexNumber) ;

}

В коде используется версия метода Parseo, которая имеет дополнительный паретр, указывающий формат преобразуемого числа. В данном случае второй паретр — NumberStyles.HexNumber ИЗ пространства имен System.Globalization— указывает, что число в шестнадцатеричном формате.

ПРИМЕЧАНИЕ

Убедиться в том, что 100 в шестнадцатеричном счислении соотносится с 256 в десичной, можно с помощью программы Калькулятор, поставляемой с операционной системой Windows. Переключите калькулятор в инженерный вид, установите перлючатель Hex,  введите число  100 и установите переключатель обратно в  Dec.

Перечисление NumberStyles содержит другие члены, которые можно  использовать для преобразования чисел в соответствии с другими правилами. Например,  член AiiowParentheses применяется для обработки скобок, обозначающих, что число отрицательное, а члены AiiowLeadingwhite и AiiowTraiiingwhite обрабатывают начальные и конечные  пробельные  символы  соответственно.  Пример  использовия  этих  членов  перечисления NumberStyles приводится  в следующем  коде:

public void TestParseNegativeValue(){ int value = int.Parse("  (10)

NumberStyles.AllowParentheses | NumberStyles.AllowLeadingWhite | NumberStyles .AiiowTraiiingwhite)

}

В данном примере строковое представление числа 10 усложнено скобками, началыми и конечными пробельными  символами.  Применение  только  метода  Parse () для преобразования этой строки в числовое представление не даст желаемых рультатов, поэтому  необходимо  использовать  члены  перечисления  NumberStyles. Член перечисления AllowParentheses обрабатывает скобки, AllowLeadingWhite — начальные пробельные символы, a AiiowTraiiingwhite— конечные  пробельные символы.    После   обработки   строки   этими   членами   перечисления   NumberStyles и методом  Parse ()  в переменной  value сохраняется числовое значение -10 .

Другие члены перечисления NumberStyles применяются для обработки десятичной точки в дробных числах, положительных и отрицательных чисел и т.  п.  Это  привит нас  к  теме  обработки  чисел  иных  типов,  чем  целые  (int) .  Каждый  из  базы х ТИПОВ данных , таки х как boolean, byte и  double, имее т СВОИ метод ы  Parse о и TryParse)). Кроме этого, метод TryParse о может использовать перечисление NumberStyles. (Подробную информацию о членах перечисления  см.  в  документии  MSDN.)

Преобразование целочисленных значений выполняется одинаковым образом, незисимо от страны.  Но  с  преобразованиями действительных  чисел  и  дат дело  обстт иначе. Рассмотрим следующий пример кода, в котором делается попытка преоазовать  строку,  содержащую  представление  десятичных  значений:

public void TestDoubleValue() {

double value = double.Parse("1234.56");

value = double.Parse("1, 234. 56") ;

}

В  данном   примере   оба  случая   применения   метода   Parse О обрабатывают  число 1234.56. В первом случае метод Parse() преобразовывает простое число, т. к. оно содержит только десятичную точку, отделяющую целую  часть  от  дробной.  Во  втом случае метод Parse о преобразует более сложное число, содержащее кроме десятичной точки разделитель тысяч. В обоих случаях процедуры Parse () испоялись  успешно.

Но если вы протестируете этот код,  возможно,  что  будет  сгенерировано  исключие.  В  таком  случае  виновником  будут региональные  стандарты.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии