Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




Все функции форматирования возвращают новую строку в заданном формате. В 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-04-12; просмотров: 188.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...