Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

Все функции форматирования возвращают новую строку в заданном формате. В VB.NET сохранены аналоги старых функций форматирования из VB6 и VBScript, поэтому вы можете продолжать использовать функции Format, Format Number, FormatCurrency, 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.

Математические операторы

В табл. 4.7 приведены условные обозначения шести базовых математических операций.

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

 

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

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

 

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

 

Module Modulel

Sub Main()

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

Console. ReadLine()

End Sub

End Module

 

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

 

System.Double

 

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

Ниже приведен пример ситуации, в которой необходимо учитывать тип значения, возвращаемого оператором деления. Перед нами простая (но нерабочая) версия программы, преобразующей температуру по Цельсию в температуру по Фаренгейту. В выделенной строке отсутствует суффикс @, преобразующий результат деления к типу Decimal:

 

Option Strict On

Module Modulel

Sub Main()

Dim cdeg As Decimal

Console.Write(“ 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 вместо WriteLine, чтобы предотвратить перевод строки после вывода текста. Кроме того, в реальной программе введенные данные следовало бы предварительно проанализировать, потому что пользователи часто ошибаются при вводе.

Наконец, вещественное деление в 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, «не является числом»).

 

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

 

Таблица 4.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) выполняется раньше, чем сложение.

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

Возведение в степень (^).

Унарный минус (изменение знака числа).

Умножение и деление.

Целочисленное деление.

Вычисление остатка (Mod).

Сложение и вычитание.

 

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

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

 

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

Сокращенная запись  Эквивалент

А*=В                 А = А*В

А+=В                           А = А + В

А/=В                        А = А/В

А-=В                        А = А-В

А\=В                   А = А\В

А^=В                           А = А^В

А&=В                 А = А & В (конкатенация строк)

 



<== предыдущая лекция | следующая лекция ==>
Преобразования разнотипных значений | Типовые звенья систем автоматического управления
Поделиться с друзьями:


Дата добавления: 2018-11-11; Мы поможем в написании ваших работ!; просмотров: 162 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2300 - | 2053 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.