|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Форматування даних
Всі функції форматування
повертають новий рядок
в заданому форматі. У VB .NET збережені
аналоги старих функцій форматування
з Vb6 і Vbscript, тому ви
можете продовжувати використовувати функції
Format, Format Number, For-matcurrency, Formatpercent
і Formatdatetime. Останні чотири функції
непогано справляються з простим
форматуванням, але ми все одно
вважаємо за краще
використовувати могутніші засоби
форматування, реалізовані в .NET
Framework. Синтаксис
форматування в .NET Framework на перший
погляд виглядає декілька дивно.
Розглянемо нескладний приклад: Dim
balance As Decimal = 123456 Dim
creditlimit As Decimal = 999999 Console.WriteLine("Customer
balance is {0:c}, credit limit is {1:c} ",_ balance. creditlimit
= balance) Результат: Customer balance is
$123,456.00. credit limit is $876.543.00 Спробуйте
привести фрагмент, виділений
жирним шрифтом, до наступного вигляду: Console.WriteLine("Customer credit is {1:c}, balance is {0:c} ". balance. creditlimit
= balance) Ви отримаєте
наступний результат: Customer credit is $876.543.00.
balance is $123.456.00 Змінні, що
форматуються, перераховуються в порядку
їх проходження в списку. Так, в
другому прикладі {1:с} означає другу
змінну в списку, а {0:с}
відповідає першій змінній (нагадаємо,
що індексація в .NET Framework
починається з 0). «С» означає
форматування в грошовому форматі,
визначеному в параметрах
локального контексту Windows.
У таблиці. 3.7
приведені умовні позначення
шести базових математичних
операцій.
Таблиця 3.7.
Математичні операції
Щоб краще
знатися на різних типах ділення,
можна скористатися методом .NET
Gettype. У командах виводу (таких як
Writeline) цей метод повертає ім'я
типу в строковому уявленні.
Розглянемо наступну програму: Module
Modulel Sub Main() Console.WriteLine((4
/ 2).GetType()) Console. Readline() End Sub End
Module У консольному вікні виводиться рядок System.Double
Нижче приведений приклад
ситуації, в якій необхідно
враховувати тип значення, повертаного
оператором ділення. Перед
нами проста (але неробоча) версія
програми, що перетворює
температуру за Цельсієм в
температуру за Фаренгейтом. У
виділеному рядку відсутній
суфікс @, перетворюючий результат
ділення до типу Decimal: Option Strict On Module Modulel Sub
Main() Dim cdeg
As Decimal Console.. Writer
Enter the degrees in centigrade...") cdeg=cdec(Console.ReadLine()) Dim fdeg
As Decimal fdeg = (((9 / 5) *
cdeg) + 32) Console.WriteLine(cdeg
& " is " & fdeg & " degrees Fahrenheit.") Console. Readline() End Sub End Module Із-за
присутності знаку / у виділеному
рядку змінної fdeg привласнюється
результат типу Double. У режимі
жорсткої перевірки типів це
приводить до того, що на стадії
компіляції буде видано наступне
повідомлення про помилку: Option Strict
disallows implicit conversions from Double to Decimal. Як виправити помилку? Тільки не треба прибирати команду Option Strict — це одне з кращих нововведень VB .NET, яке позбавляє вас від злісного спотворення типів. Краще скористайтеся суфіксом @ або перетворіть вираз (повністю або частково) до типу Decimal. Приклад: fdeg = ((Cdec(9 /
5)* cdeg) + 32) Оскільки
результат ділення перетвориться до
типу Decimal, результат теж відноситься
до типу Decimal. Залишається лише відмітити,
що в цьому простому прикладі
ми використовуємо метод Write замість
Wri teli ne, щоб запобігти перекладу
рядка після виведення тексту. Крім
того, в реальній програмі введені
дані слід було б
заздалегідь проаналізувати,
тому що користувачі часто
помиляються при введенні. Нарешті,
речове ділення в VB .NET
відповідає стандарту IEEE,
тому замість помилки ділення на
нуль тепер відбувається щось
дивне. Приклад: Sub Main() Dim
getdata As String Dim x, у
As Double x = 4 У =
0 Console.WriteLine("What
is 4/0 in VB .NET? " & x / у) Console.ReadLine() End
Sub Результат
виглядає так: What is 4/0 in VB.
NET? Infinity Результат ділення 0/0 рівний NAN (Not A Number,
«не є числом»). У таблиці. 3.8
перераховані оператори,
використовувані тільки при діленні
чисел типу Integer і Long. Таблиця 3.8.
Математичні оператори цілочисельного ділення
Оператор \
ігнорує залишок від ділення і
повертає результат типу Integer (якщо
він відноситься до інтервалу
допустимих значень цього типу).
Наприклад, 7\3=21. Нагадаємо, що
оператор / дає результат типу Double;
якщо ви хочете, щоб приватне
відносилося до типу Integer —
скористайтеся оператором \ або
функцією перетворення типу. Оператора Mod
доповнює оператор цілочисельного
ділення і повертає залишок від
цілочисельного ділення. Наприклад, 7
Mod 3 = 1. Якщо цілі числа діляться без
залишку, оператор Mod повертає 0: 8
Mod 4 = 0.
Круглі дужки і пріоритет операцій
При обробці
складних виразів
послідовність виконання
операцій задається двома способами.
При використанні круглих Дужок
вам не доведеться запам'ятовувати
пріоритети різних операцій. У VB .NET,
як і в багатьох мовах
програмування, операції
володіють пріоритетом, що
визначає послідовність їх
виконання. Множення володіє вищим
пріоритетом, ніж складання;
отже, вираз 3+4*5 рівне
23, оскільки множення (4*5)
виконується раніше, ніж складання. Нижче
перераховані математичні
операції в порядку убування
пріоритету.
Якщо дві
операції володіють однаковим
пріоритетом, порядок виконання
визначається порядком їх
проходження у виразі (зліва
направо). Для деяких
операцій, об'єднаних з
привласненням, в VB. NET передбачені
скорочені позначення,
перераховані в наступній таблиці.
Математичні функції і математичні константи
Вбудовані математичні функції Vb6
працюють і в VB
.NET, але ми вважаємо за краще використовувати
методи класу Math, що
входить в .NET Framework. У цей клас
також входять деякі корисні
константи (наприклад, Math. PI і Math. Е).
Основні математичні функції
класу Math перераховані в таблиці. 3.9. Всі
ці функції оголошені загальними (shared),
тому вони належать класу Math в
цілому, а не його окремим
екземплярам (які, втім, все
одно неможливо створити — див.
розділ 4). Всі
перераховані методи є
загальними методами класу Math, тому
вони повинні викликатися з префіксом
Math — наприклад, Math.Log10(l0).
Таблиця 3.9.
Загальні математичні функції класу Math
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||