ПОНЯТНО О Visual Basic NET

Форматирование чисел


Одни и те же значения могут выглядеть по-разному. Например, в школьной тетрадке одну и ту же дату вы можете записать так –   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.####################")

Только имейте в виду – если ваш результат будет такой маленький, что двадцати цифр, указанных мной после точки, не хватит, то ничего, кроме нулей, вы и не увидите, а вот экспоненциальный формат покажет вам результат, пусть и непривычный для чтения.


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