Тип данных Decimal используется в VBA Excel только внутри типа Variant. Максимальное общее количество значащих цифр до запятой и после нее равно 29.
Определение типа данных Decimal
Decimal не является типом данных с плавающей запятой, в отличие от типов Single и Double. Он содержит целое двоичное значение вместе с битом знака и целочисленным коэффициентом масштабирования, который указывает, какая часть значения представляет дробную часть.
Decimal является самым медленным по производительности числовым типом данных, но числа в его формате имеют более точное представление в памяти, чем типы с плавающей запятой.
В настоящее время в VBA Excel нет отдельного типа данных Decimal, но он доступен внутри типа Variant. Для получения числа типа Decimal и присвоения его переменной типа Variant используется функция CDec
. Длинное число перед преобразованием в Decimal должно быть в текстовом формате.
Если число типа Decimal записать в ячейку рабочего листа общего формата, оно будет автоматически преобразовано в экспоненциальную форму. Чтобы этого не случилось, ячейке необходимо назначить текстовый формат, а число перед записью конвертировать в строку.
Диапазон чисел типа Decimal
- Максимальное значение числа без дробных разрядов: +/-79228162514264337593543950335 (+/-7,9228162514264337593543950335E+28).
- Наибольшее значение числа с 28 десятичными знаками: +/-7,9228162514264337593543950335.
- Наименьшее ненулевое значение: +/-0,0000000000000000000000000001 (+/-1E-28).
Тип данных Decimal может использоваться в финансовой сфере и при научных вычислениях. На практике, для большинства расчетов, применяются менее точные числовые типы данных.
Пример кода в VBA Excel
Присвоим с помощью кода VBA Excel максимальные по длине числа типа данных Decimal переменным, проведем математическую операцию с числами и запишем ее результат в ячейки рабочего листа с преобразованием значения в текст и без преобразования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub Primer() Dim a, b, c, d, e, f 'Присваиваем переменным a, b и c значения типа Decimal a = CDec("79228162514264337593543950335") b = CDec("7,9228162514264337593543950335") c = CDec("0,0000000000000000000000000001") 'Вычисляем математическое выражение d = a / (3 * b) 'Назначаем ячейке A1 текстовый формат Cells(1, 1).NumberFormat = "@" 'Присваиваем ячейке A1 преобразованное в строку 'значение переменной d Cells(1, 1) = CStr(d) 'Присваиваем ячейке A2 общего формата значение Decimal Cells(2, 1) = d 'Присваиваем значения ячеек A1 и A2, преобразованные 'в тип данных Decimal, переменным e и f e = CDec(Cells(1, 1)) f = CDec(Cells(2, 1)) 'На строку End Sub устанавливаем значок паузы End Sub |
Что записалось в переменные, смотрите в окне Locals:
Обратите внимание, что в ячейке A2 значение типа Decimal было автоматически преобразовано в экспоненциальный формат с обрезанием числа. После обратного преобразования его в Decimal, на месте обрезанной части отображены нули.