Справочная статья
Диапазоны и ограничения типов
Раздел диапазонов содержит точные числовые пределы и правила выбора типа литерала. Специальные данные и массивы имеют дополнительные ограничения в своих тематических главах.
Числовые диапазоны
| Тип | Минимум | Максимум | Кратко |
|---|---|---|---|
INTEGER |
-2147483648 |
2147483647 |
32-битное знаковое целое число. |
LONG |
-9223372036854775808 |
9223372036854775807 |
64-битное знаковое целое число. |
DOUBLE |
около -1.7976931348623157E+308 |
около 1.7976931348623157E+308 |
64-битное число с плавающей точкой; результат должен оставаться конечным. |
DECIMAL |
-79228162514264337593543950335 |
79228162514264337593543950335 |
Точное десятичное число с 28-29 значащими цифрами. |
DOUBLE использует двоичную плавающую точку и может округлять десятичную дробь. Для десятичной точности выбирайте DECIMAL, учитывая его меньший диапазон. Неконечный результат DOUBLE считается ошибкой выполнения.
Тип числового литерала
| Запись | Тип | Правило |
|---|---|---|
123 | INTEGER | Если целое десятичное значение помещается в диапазон INTEGER. |
2147483648 | LONG | Если значение уже не помещается в INTEGER, но помещается в LONG. |
1.25 | DOUBLE | Литерал с десятичной точкой получает тип DOUBLE. |
&HFF | INTEGER или LONG | Шестнадцатеричный литерал выбирает целочисленный тип по диапазону значения. |
&B1010 | INTEGER или LONG | Двоичный литерал выбирает целочисленный тип по величине; допустимы цифры 0 и 1. |
TRUE, FALSE | BOOLEAN | Логические литералы не являются числами. |
Минус перед числом является отдельной унарной операцией. Тип целого литерала определяется диапазоном; дробная запись с точкой сама по себе имеет тип DOUBLE. Явный числовой контекст может изменить тип литерала с проверкой диапазона. Правила префиксов &H и &B, отрицательных величин и вывода описаны в статье систем счисления. Особая обработка литерала при явной инициализации DECIMAL описана в правилах преобразования.
Ограничения по темам
Диагностика
MB0004— числовой литерал выходит за допустимый диапазон.MB2018— константное значение не помещается в явно указанный тип.MB3002— индекс массива выходит за доступные границы.MB3007— недопустимый массивный диапазон или запрещённая операция с массивом.MB3008— арифметическое переполнение или неконечный результатDOUBLE.