С типом дробных чисел Double мы встретились в 5.2.3. Познакомимся поближе с ним и с типом Single. Оба они предназначены для работы с целыми и дробными числами и различаются, согласно таблице, точностью и диапазоном значений.
Создайте кнопку и введите такую программу:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim a, b, c As Single
a = 23.456
b = 100
c = a + b
WriteLine(a) : WriteLine(b) : WriteLine(c)
Dim d, f, g As Double
d = 123456789
f = 0.000555
g = d + f
WriteLine(d) : WriteLine(f) : WriteLine(g)
End Sub
Обратите внимание, что оператор Dim d, f, g As Double находится не на самом верху процедуры. Это ничего. Надо только, чтобы объявление переменной было расположено в процедуре раньше ее «употребления».
Запустите проект. Вот результат:
23,456
100
123,456
123456789
0,000555
123456789,000555
Все правильно. Попробуем теперь проверить тип Single на прочность, как мы проверяли тип Integer. Попробуем записать вместо a = 23.456 очень длинную дробь:
a = 23.45678901234567890123456789
Но VB не дает нам роскошествовать. Он прямо в окне кода укорачивает строку до:
a = 23.456789012345681
причем даже чуть-чуть искажает число. Поставим курсор мыши на этот литерал и увидим подсказку «Double». Почему? Ведь переменная a имеет тип Single! Дело в том, что VB, пока проект не запущен, не утруждает себя угадыванием смысла литералов в окне кода и все дробные литералы «стрижет под Double». Запустим проект. Вот первые три числа результатов:
23,45679
100
123,4568
Как видите, VB обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные типом Double. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее – 17 значащих цифр.