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

Регіональні стандарти і країна відіграють важливу роль при обробці чисел і дат, які зберігаються у вигляді рядків Уявіть собі виконання додавання чисел, що зберігаються у вигляді рядків Приклад такого складання продемонстрований на рис 312

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

Додавання чисел являє собою арифметичну операцію Але при додаванні рядків виконується операція конкатенації, тобто зрощення одного рядка з дрой Використання операції додавання з рядками представляє зручний спосіб для конкатенації рядків

Але в даному прикладі конкатенація була метою складання Щоб отримати жаем ​​результат, нам потрібно звертатися з рядками, як з числами, над якими потім і виконується операція додавання, а результат – 3 (1 + 2 = 3) – сохряется у змінній с Виправлений код для отримання бажаного результату показаний на рис 313 Цей код використовує метод NET, щоб зіставити рядках поданої цифри відповідне числове подання

Тип int має метод Parse про, за допомогою якого можна перетворити рядок подання числа в його числовий еквівалент Метод працює належним оазом, тільки якщо рядок містить допустиме уявлення числа Іншими Слами, рядок може містити тільки цифри, але не букви або, за винятком знака плюс або мінус, інші символи В останньому випадку метод Parse про кість помилку

Рис 313 Зіставлення рядків числах

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

int value

i f (intTryParse (1, out value)) С

}

Метод TryParse () повертає не відповідає цілочисельне значення, а булевий прапор, який вказує, чи піддається рядок перетворенню Якщо повертається значиться true, то тоді рядок перетвориться, а результат зберігається в параметрі value, позначеному ідентифікатором out Ідентифікатор out вказує, що результати перевірки зберігаються в наступному за ним параметрі: перетворене значення у разі успіху або 0 в іншому випадку За допомогою методу TryParse () можна перетворювати інші числові типи, наприклад float TryParse ()

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

using SystemGlobalization

public void ParseHexadecimal() {

int value = int Parse (&quot 100&quot , NumberStyles HexNumber)

}

У коді використовується версія методу Parseo, яка має додатковий паретр, який вказує формат преутвореного числа У даному випадку другий паретр – NumberStylesHexNumber ІЗ простору імен SystemGlobalization- вказує, що число в шістнадцятковому форматі

ПРИМІТКА

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

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

public void TestParseNegativeValue(){ int value = intParse(&quot  (10)

NumberStylesAllowParentheses | NumberStylesAllowLeadingWhite | 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 = doubleParse(&quot123456&quot)

value = doubleParse(&quot1, 234 56&quot)

}

У даному прикладі обидва випадки застосування методу Parse Про обробляють число 123456 У першому випадку метод Parse () перетворює просте число, тому що воно містить тільки десяткову точку, яка відокремлює цілу частину від дробової Під втом випадку метод Parse про перетворить більш складне число, що містить крім десяткового дробу роздільник тисяч В обох випадках процедури Parse () іспоялісь успішно

Але якщо ви протестуєте цей код, можливо, що буде згенеровано виключити У такому випадку винуватцем будуть регіональні стандарти

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*