Cамоучитель по VB.NET

Redtube смотрите на http://www.redtube-com.ru. | дойки.сом | проститутка лера |


 

Форматирование данных


Все функции форматирования возвращают новую строку в заданном формате. В 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 приведены условные обозначения шести базовых математических операций.

Результат стандартного деления (/) всегда относится к типу Double, даже в случае де-ления без остатка. Результат целочисленного деления (\) всегда относится к типу Integer. Это означает, что при работе с типами Decimal и Integer вам придется часто использовать функции преобразования.

Таблица 3.7. Математические операции

Оператор
Операция
+ Сложение
- Вычитание (и обозначение отрицательных чисел)
/ Деление (преобразование к Double — не может вызвать исключение DivideByZero; см. главу 7)
\ Целочисленное деление (без преобразования — может вызвать исключение DivideByZero)
* Умножение
^ Возведение в степень

Чтобы лучше разобраться в разных типах деления, можно воспользоваться методом .NET GetType. В командах вывода (таких как WriteLine) этот метод возвращает имя типа в строковом представлении. Рассмотрим следующую программу:

Module Modulel

Sub Main()

Console.WriteLine((4 / 2).GetType())

Console. ReadLine()

End Sub

End Module

В консольном окне выводится строка

System.Double

Возможности метода GetType не ограничиваются простым выводом имени — в частности, он используется в процессе рефлексии. Механизм рефлексии описан в главе 4.

Ниже приведен пример ситуации, в которой необходимо учитывать тип значения, возвращаемого оператором деления. Перед нами простая (но нерабочая) версия программы, преобразующей температуру по Цельсию в температуру по Фаренгейту. В выделенной строке отсутствует суффикс @, преобразующий результат деления к типу 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 / y)

Console.ReadLine()

End Sub

Результат выглядит так:

What is 4/0 in VB. NET? Infinity

Результат деления 0/0 равен

NaN (Not A Number, «не является числом»).

В табл. 3.8 перечислены операторы, используемые только при делении чисел типа Integer и Long.

Таблица 3.8. Математические операторы целочисленного деления

Оператор
Операция
\
Целочисленное деление любых целых чисел
Mod
Остаток от целочисленного деления

Оператор \ игнорирует остаток от деления и возвращает результат типа 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) выполняется раньше, чем сложение.

Ниже перечислены математические операции в порядке убывания приоритета.

  1. Возведение в степень (^).
  2. Унарный минус (изменение знака числа).
  3. Умножение и деление.
  4. Целочисленное деление.
  5. Вычисление остатка (Mod).
  6. Сложение и вычитание.

Если две операции обладают одинаковым приоритетом, порядок выполнения определяется порядком их следования в выражении (слева направо).

Сокращенная запись операций с присваиванием

Для некоторых операций, объединенных с присваиванием, в VB. NET предусмотрены сокращенные обозначения, перечисленные в следующей таблице.

Сокращенная запись
Эквивалент
А*=В
А = А*В
А+=В
А = А + В
А/=В
А = А/В
А-=В
А = А-В
А\=В
А = А\В
А^=В
А = А^В
А&=В
А = А & В (конкатенация строк)

 

Математические функции и математические константы

Встроенные математические функции VB6 работают и в VB .NET, но мы предпочитаем использовать методы класса Math, входящего в .NET Framework. В этот класс также входят некоторые полезные константы (например, Math. PI и Math. Е). Основные математические функции класса Math перечислены в табл. 3.9. Все эти функции объявлены общими (shared), поэтому они принадлежат классу Math в целом, а не его отдельным экземплярам (которые, впрочем, все равно невозможно создать — см. главу 4).

Все перечисленные методы являются общими методами класса Math, поэтому они должны вызываться с префиксом Math — например, Math.Log10(l0).

В VB .NET предусмотрена целая группа методов для получения разнообразных случай-ных чисел. Мы рассмотрим эти методы в главе 4, когда речь пойдет о создании объектов.

Таблица 3.9. Общие математические функции класса Math

Математическая функция
Описание
Abs
Возвращает абсолютное значение (модуль) числа
Acos
Возвращает угол, косинус которого равен заданному числу
Asin
Возвращает угол, синус которого равен заданному числу
Atan
Возвращает угол, тангенс которого равен заданному числу
Ceiling
Возвращает наименьшее целое число, большее либо равное заданному числу
Cos
Возвращает косинус заданного угла
Exp Возвращает число е (приблизительно 2,71828182845905), возведенное в заданную степень
Floor Возвращает наибольшее целое число, большее либо равное заданному числу
Log
Возвращает натуральный логарифм
Log10
Возвращает десятичный логарифм
Max
Возвращает большее из двух заданных чисел
Min
Возвращает меньшее из двух заданных чисел
Round
Возвращает целое число, ближайшее к заданному числу
Sign
Возвращает величину, определяющую знак числа
- Sin
Возвращает синус заданного угла
Sqrt
Возвращает квадратный корень
Tan
Возвращает тангенс заданного угла

 

 

Назад Начало Вперед