ПОНЯТНО О Visual Basic NET

Целые числа или десятичные дроби? Числовой тип Decimal


Вы спросите: зачем использовать типы целых чисел Integer и Long, если типы десятичных дробей Single и Double обеспечивают нам работу как с целыми, так и с дробными числами? Здесь дело в наличии или отсутствии абсолютной точности вычислений. При использовании типов десятичных дробей вполне мыслима ситуация, когда дважды два будет не точно 4, а, скажем, 4.00000000000381. Связано это с особенностями представления десятичных дробей в компьютерах.  В большинстве реальных задач такая маленькая погрешность несущественна, однако существуют задачи, где точность нужна абсолютная. При использовании же типов целых чисел VB присматривает за тем, чтобы все числа и результаты были абсолютно точными целыми числами. При сложении, вычитании и умножении это, сами понимаете, не проблема, а вот при делении компьютеру приходится округлять.

Совет: Если вы уверены, что переменная всегда должна быть целым числом и никогда дробным, объявляйте ее целым типом, если есть хоть маленькое сомнение – дробным.

Однако абсолютная точность бывает нужна и при работе с дробными числами. Например, в финансовых расчетах доллары или рубли – это целая часть десятичной дроби, а центы или копейки – сотые доли этой дроби. Ошибаться здесь нельзя ни на копейку. В этой ситуации идеально подходит тип Decimal. Этот тип хоть и имеет дробную часть, сложение и вычитание дробных чисел выполняет абсолютно точно. Количество значащих цифр у него рекордное (см. таблицу в 5.4.2).

Попробуем теперь проверить работу типа Decimal.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim a, b, c As Decimal

        a = 1234567890123456789

        b = 0.0098765432109

        c = a + b

        WriteLine(a) : WriteLine(b) : WriteLine(c)

End Sub

Запустите проект. Вот результат:

1234567890123456789



0,0098765432109

1234567890123456789,0098765432

Как видите, VB, как и положено, обрезал сумму до 29 значащих цифр.

Символы типа. Обратите внимание, что значения переменным а и b я дал не длинные, тип Decimal может проглотить и гораздо длиннее. Попробуем добавить цифр к литералу переменной а. VB подчеркивает литерал и выдает подсказку об ошибке, в которой мы видим слово overflow. В чем дело? Снова укоротим литерал, поставим на него курсор мыши и увидим подсказку «Long». Почему? Ведь переменная a имеет тип Decimal! Дело в том, что VB без явного приказа человека не хочет причислять литералы к типу Decimal. А приказ такой – буква D в конце литерала:


        a = 12345678901234567890123456789D

Теперь все в порядке. Буква называется символом типа (Literal type character).

Если вы захотите заставить VB причислить литерал к определенному числовому типу, то вот вам соответствующие символы типов:

Short

Integer

Long

Single

Double

Decimal

S

I

L

F

R

D


Содержание раздела