Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Базовые средства программирования на Visual Basic в среде VisualStudio. Net

Преобразование данных в выражениях и операторе присваивания

У многих программистов при работе на VB часто возникают проблемы с правильным преобразованием вещественных чисел или же строк, содержащих числа, к целым числам.

Рассмотрим более подробно проблему преобразования данных в выражениях и операторах присваивания.

В процессе рассмотрения примеров мы уже встречались с проблемой преобразования данных. При работе с данными в VB нужно иметь в виду поддерживаемые в VS преобразования.

Во-первых, это расширяющие, не приводящие к потерям данных, преобразования, например,

Integer —? Long, Decimal, Single, Double.

Во-вторых, это сужающие - преобразования (с возможностью потерей данных) в тип данных, содержащий меньшие значения данных, например, Single —» Integer;

Double —» Integer.

Потери данных, связанных с сужающими преобразованиями, можно из бежать, используя установки Option Strict On Option Explicit On.

Напомним, что первая установка (Option Strict On) разрешает все расширяющие преобразования, а все сужающие преобразования заставляет программиста делать осознанно, т.е. явно вызывая нижеописанные функции преобразования типов. Вторая установка (Option Explicit On) принуждает программиста объявлять все переменные до их использования в программе.

Обратите внимание, что в лабораторных работах приведенные выше установки обязательно необходимо использовать.

Приведем список функций языка VB, являющихся ключевыми словами, и, которые позволяют осуществлять явные преобразования типов:

  • •СВоо1(х) - возвращает логическое значение. В качестве параметра X функции может быть передано условие или числовое значение.
  • •CByte(x) - возвращает значение типа Byte. В качестве параметра X передается соответствующая строка или числовое значение.
  • •CChar(x) - возвращает символ. В качестве параметра X передается целое число, находящееся в промежутке от 0 до 65 535.
  • • CDate(x) - возвращает значение типа Date. В качестве параметра х можно использовать любое принятое обозначение даты.
  • • CDbl (х) - преобразовывает значение параметра X к типу Double.
  • • CDec (х) - применяется для преобразования параметра х к типу Dec imal.
  • • Clnt(x) - преобразовывает значения параметра х к целочисленному типу Integer. Если в качестве параметра х передано дробное число, то дробная часть просто округляется по правилам математики.
  • •CLng(x) - возвращает значение типа Long. Обработка параметра X производится по образцу функции Clnt(x).
  • • CShort(x) - преобразовывает значение параметра х к типу Short.
  • •CSng(x) - применяется для преобразования значения параметра X к типу Single.
  • • CStr(x) - используется для преобразования данных в строковый тип String.

Кроме «внутренних» функций языка VB для явных преобразований можно использовать классы и модули как VB, так и .NET.

В модуле Microsoft .VisualBasic.Conversion определено множество методов преобразования значений, включая:

• Int ( ) и Fix( ) — функции возвращают целую часть числа. Предполагается, что аргумент имеет тип Double или является числовым выражением. Возвращается тип Double. А уже этот Double затем можно преобразовать в Integer или Long. Главное, чтобы число уместилось в диапазон нужного вам типа. Разность при использовании Int( ) и

Fix( ) заметна только лишь при отрицательном значении аргумента. Дело в том, что Int( ) всегда возвращает ближайшее меньшее целое число, а Fix( ) просто отбрасывает дробную часть. То есть, для Int(4.5) nFix(4.5) возвращает 4, тогда как для Int (-4.5) возвращает - 5, а для Fix(-5) -4.

  • • Val(х) - преобразует значение параметра X строкового типа String к числовому значению типа Double.
  • • Str(x) - преобразует число в строку, причем перед положительным числом вставляется пробел.

Эти функции преобразовывают числовые аргументы в целое число типа Long и Integer соответственно. Дробная часть при этом округляется по правилам математики. Таким образом, результатом преобразования CInt(1.5) или CLng(l. 5) будет целое число 2. А если аргументом будет

1.4, то в результате получим 1. Знак числа при этом роли не играет, то есть -1.5 будет преобразован в -2, а -1.4 - в -1.

При преобразовании из строки, содержащей число, важно помнить, что функции преобразования используют национальные настройки для получения символа разделения целой и дробной частей числа. Поэтому, если у вас разделителем целой и дробной частей числа является точка «.», а в строковом представлении числа будет фигурировать запятая, то вы получите ошибку несовпадения типов при попытке преобразовать такую строку в целое число (кстати, эта ошибка возникнет и при попытке использования CDbl ( ) или CSng( ) для преобразования строки в вещественное число, а также и при использовании Int( ) или Fix( )).

Функции Val( ), CDbl( ) и CSng( ). При использовании этих функций имеются свои нюансы. CDbl( ) и CSng( ) аналогичны CLng( ) и CInt( ). CDbl( ) преобразовывает аргумент в вещественное число типа Double, a CSng( ) соответственно в Single. Естественно, надо обращать внимание на попадание аргумента в диапазон представления и на правильность разделителя целой и дробной частей. Для функций CDbl( ) и CSng( ) разделителем целой и дробной части числа обязательно должен быть символ запятая «,», а для функции Val ( ) разделителем целой и дробной частей числа является точка «.». Функция Val( ) возвращает число, содержащееся в строке - аргументе как числовое значение типа Double. Данная функция будет пытаться преобразовать строку до тех пор, пока не встретит символ, который не может быть распознан как часть числа. В частности, функция прекрасно принимает точку в качестве разделителя, а вот пробелы просто игнорирует.

Таким образом, функция Val( ) преобразует строки в соответствии с таблицей 2.4-1.

Таблица 2.4-1

Строка

Число

Примечания

" 1 2 34569"

1234569

После отбрасывания пробелов получаем целое число 1234569.

" 1 2 345,69"

12345

После отбрасывания пробелов функция пытается разобрать число и останавливается на символе «,»,и возвращает 12345.

" 1 2 345.69"

12345.69

В отличие от предыдущего случая, здесь символ «.» является законным разделителем целой и дробной частей числа, поэтому результатом будет 12345.69.

" 12 34569number"

1234569

Здесь разбор числа будет остановлен на первой встреченной букве «п», а все, что до нее, преобразовывается в число 1234569.

Еще раз обратите внимание, что функции Val(x) и Str(x) при преобразовании в качестве разделителя целой и дробной частей числа функции Val(x) распознают только точку, а функция CDbl(x) и ей подобные - запятую, но та и другая функция игнорирует пробелы в числе.

Рассмотрим несколько примеров (рис. 2.4-1):

Округление. Для округления используется функция Round( ). Она возвращает число с заданным количеством цифр после запятой. Однако есть один нюанс. Функция Round ( ) именно округляет (что собственно видно

из названия). То есть, вызов Round(1.15, 1) даст результат 1.2. Иногда возникает ситуация, когда необходимо отбросить лишние цифры, то есть для числа 1.15 получить 1.1. Тогда надо пользоваться конструкцией вида: Fix(10*n)/10.

Здесь вместо 10 должна использоваться степень 10, соответствующая количеству оставляемых цифр после запятой. Универсальный вариант будет таким:

Р1х(10ЛЧислоЦифрПослеДесТочки*п)/10ЛЧислоЦифрПослеДесТочки

Обратите внимание, что здесь используется именно функция Fix( ), а не Int( ), которая для отрицательных чисел будет работать некорректно.

В модуле Microsoft.VisualBasic.String определенно множество методов работы со строками, в том числе Format (х, строка символов) - преобразует числовое значение параметра х в заданный формат, который определяется строкой символов. Любое числовое значение преобразовывается в символьное представление данного числа.

Примеры преобразования

Рис. 2.4-1. Примеры преобразования

Возможные значения строки символов функции Format ( ) и их описание приведены в таблице 2.4-2.

Таблица 2.4.2.

Аргументы функции Format

Символы и результаты

Пояснение

#

Число в обычном виде и без дробной части

0

Число в обычном виде и без дробной части

#.###

Число в обычном виде. После запятой пользователь видит не больше 3 знаков, целая часть дроби будет показана полностью

0.000

Число в обычном виде. После запятой пользователь видит не больше 3 знаков, целая часть дроби будет показана полностью

Е

Число показывается в экспоненциальной форме

Если параметр функции Format ( ) строка символов опущен, то

функция производит тоже действие, что и функция CStr( ) для численного выражения. Положительные числа, преобразуемые в строки, теряют пробел слева, зарезервированный для знака. Если положительное число преобразовано в строку функцией CStr( ), то пробел слева сохраняется. Например,

  • (Format(2, "000000")) 'возвращает 900062
  • (Format(10,, "0.00")) 'возвращает 10.00_

Для всех числовых типов VB и всех соответствующих классов .NET определен метод ToString(x), который преобразует числовое значение в строку. Этот метод особенно полезен, когда строковое представление числа нужно добавить к другой строке, например:

Dim myValue As Double = 123.45

Dim res As String = "T final Hi & myValue.ToString( )

Метод ToString(x) учитывает региональные настройки и по умолчанию используются настройки, связанные с текущим потоком. Например, в качестве десятичного разделителя он использует точку, если национальные настройки - это русский язык.

'Вывод PI с 5 знаков после десятичной точки (всего 6 цифр)

Dm d As Double = Math.PI

TextBoxl.Text = d.ToString("G6") :оез-т 3.14159 всего 6 ииор

Все числовые классы поддерживают перегруженную форму метода ToString( ), которая позволяет использовать строку форматирования целых действительных чисел в однотипные строки:

Dim intValue As Integer = 12345

TextBoxl.Text = intValue.ToString("##,##0.00") '= 12 345.00 Dim sngValue As Single = 12345.5

TextBox2.Text = sngValue.ToString("##,##0.00") ' = 12 345.59

Запятая в строке форматирования означает отделение каждых трех цифр в числе пробелом, а точка - представление дробной части числа.

Для явного преобразования любого числового типа в строку, кроме функций St г ( ) и CStr( ), можно использовать метод ToSt ring ( )класса Convert:

Dim Число As Double Число = 3.14

Dim Строка As String = Convert.ToString(4ncno)

Напомним также, что обратное преобразование из строки в число можно выполнить или с помощью функций Val( ), CDbl( ), Clnt( ) , ИЛИ с помощью соответствующих методов класса Convert - ToDouble( ), ToInt32( ) и других. Причем список методов можно увидеть с помощью технологии IntelliSense при вводе точки после Convert.

 
Посмотреть оригинал
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >
 

Популярные страницы