Форматирование чисел
Одни и те же значения могут выглядеть по-разному. Например, в школьной тетрадке одну и ту же дату вы можете записать так – 25.12.03 и так – 25 декабря 2003 года. Одно и то же число вы можете записать так – 500 и так – 5*102. Что касается VB, то он выбирает внешний вид данных, исходя из своих соображений, которые не всегда совпадают с нашими желаниями. В этом случае возникает необходимость строго указать компьютеру, в каком виде (формате) мы хотим лицезреть то или иное значение.
Взгляните на такую программу:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Double = 1230000000000000000
WriteLine(a)
End Sub
Запустите проект. Вот результат:
1,23E+18
Что это значит? Это значит, что VB не любит слишком длинных чисел и представляет их вам не в привычном для обычного человека, а в так называемом экспоненциальном или научном формате. Число 1,23E+18 это то же самое число 1230000000000000000, только выглядящее по-другому. Конструкция E+18 означает просто умножение на 1018. Таким образом, 1,23E+18 означает 1,23*1018. По-другому, вам нужно передвинуть запятую на 18 позиций направо – и получится нормальное число.
А теперь взгляните на такую программу:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a As Double = 0.00000000000654
WriteLine(a)
End Sub
Результат:
6,54E-12
Конструкция E-12 означает просто умножение на 10-12
или, что то же, деление на 1012. Таким образом, 6,54E-12 означает 6,54*10-12. По-другому, вам нужно передвинуть запятую на 12 позиций налево – и получится нормальное число.
Если после этих объяснений вы все еще не полюбили экспоненциальный формат, вы можете приказать компьютеру, чтобы он вас не утомлял им, а показывал результаты по-человечески. Для этого в операторе WriteLine(a) нужно использовать функцию форматирования, то есть управления внешним видом. Функция эта называется Format. Для конкретности возьмем первую из наших двух программ, ту, где присутствует большое целое число. Здесь нужно вместо a написать Format(a, "#"). Получится
WriteLine(Format(a, "#"))
Символ # внутри кавычек означает, что вы желаете видеть число в обычном виде и без дробной части. Вот тот же результат в новом формате (проверьте):
1230000000000000000
А теперь разберем наиболее популярные возможности функции Format по форматированию чисел (а форматировать она может, кстати, данные и других типов). Возможности эти иллюстрирует следующая программа:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim a As Double = 12345.67890123
Dim b As Double = -0.0729
WriteLine(Format(a, "#"))
WriteLine(Format(a, "0"))
WriteLine(Format(a, "#.###"))
WriteLine(Format(a, "0.000"))
WriteLine(Format(a, "########.##########"))
WriteLine(Format(a, "00000000.00000000000"))
WriteLine(Format(b, "########.##########"))
WriteLine(Format(b, "00000000.00000000000"))
WriteLine(Format(b, "0.##########"))
WriteLine(Format(b, "P"))
WriteLine(Format(a, "E"))
WriteLine(Format(a, "C"))
WriteLine(Format(a, "Ж###У###Ч###К###А####.#К###А###Ш###Т##А#Н#К#А"))
End Sub
Запустите проект. Вот результаты:
12346
12346
12345,679
12345,679
12345,67890123
00012345,67890123000
-,0729
-00000000,07290000000
-0,0729
-7,29%
1,234568E+004
12345,68р.
ЖУЧК1А2345,6К789А012Ш3ТАНКА
Поясним то, что мы увидели. В скобках функции Format располагаются через запятую два аргумента. Первый аргумент – это то, что мы форматируем – переменная, число, выражение. Второй аргумент – строка в кавычках, при помощи которой мы и управляем внешним видом числа. Символы в кавычках называются символами формата и спецификаторами формата (мы не будем вдаваться в тонкости, объясняя какие из них какие). Вот пояснение действия этих символов (полный смысл символов # и 0 становится ясен по прочтении нескольких строчек таблицы):
Символы и результаты |
Пояснение |
# |
Вы желаете видеть число в обычном виде и без дробной части |
12346 | |
0 |
Вы желаете видеть число в обычном виде и без дробной части |
12346 | |
#.### |
Вы желаете видеть число в обычном виде. После запятой вы желаете видеть не больше 3 знаков, целая часть дроби все равно будет показана полностью |
12345,679 | |
0.000 |
Вы желаете видеть число в обычном виде. После запятой вы желаете видеть ровно 3 знака, целая часть дроби все равно будет показана полностью |
12345,679 | |
########.########## |
После запятой вы желаете видеть не больше 10 знаков. Если целая часть состоит из одного нуля, то ноль перед запятой показан не будет |
12345,67890123 ?,0729 |
|
00000000.00000000000 |
После запятой вы желаете видеть ровно 10 знаков, недостающие места будут заполнены нулями. Если целая часть дроби короче 8 цифр, недостающие места будут заполнены нулями. |
00012345,67890123000 ?00000000,07290000000 |
|
0.########## |
Слева от запятой действуют «законы 0», а справа – «законы #» |
?0,0729 | |
P |
Число переводится в проценты умножением на 100 и добавлением знака % |
-7,29% | |
E |
Число показывается в экспоненциальном виде |
1,234568E+004 | |
C |
Число показывается в виде валюты страны, на которую настроена Windows |
12 345,68р. | |
Последняя строчка процедуры «с Жучкой и Каштанкой» показывает, что внутрь кавычек мы можем добавлять любые символы и они будут отображены на соответствующих местах. Это открывает перед нами возможности необычного форматирования. Надо только, чтобы эти символы не совпадали со стандартными, а то VB спутается. |
Результат.Text = Val(Число1.Text) / Val(Число2.Text)
можете написать
Результат.Text = Format(Val(Число1.Text) / Val(Число2.Text), "0.####################")
Только имейте в виду – если ваш результат будет такой маленький, что двадцати цифр, указанных мной после точки, не хватит, то ничего, кроме нулей, вы и не увидите, а вот экспоненциальный формат покажет вам результат, пусть и непривычный для чтения.