Преобразование типов данных |
Неявные преобразования типов данных:
Все типы приводятся к типу string.
Все числовые типы приводятся друг к другу. При этом плавающие числа приводятся к целым посредством округления по правилам арифметики.
Числовой тип преобразуется к символьному типу - остаток от деления по модулю на 256 рассматривается как код символа в альтернативной кодировке (CP-866). Плавающее число предварительно приводится к целому числу.
Символьный тип преобразуется к числовому типу присвоением числовому типу кода символа в альтернативной кодировке (CP-866).
Строка преобразуется к числовому типу. Если строка содержит корректный числовой десятичный или плавающий литерал, то она приводится к числовому типу в соответствии с правилами для данного литерала. В противном случае числовому типу присваивается ноль.
Булевский тип преобразуется к числовому типу. True рассматривается как 1, false - как 0.
В остальных случаях надо использовать функции приведения типов или оператор преобразования типа.
<оператор-преобразования-типа> = <имя-типа> (<выражение>)
<имя-типа> - имя заранее определенного типа.
<выражение> - любое допустимое выражение языка .
См. также "Преобразование структурных типов. ".
При вычислении арифметического выражения тип данного проверяется по ходу обработки формулы. При необходимости выполняется преобразование типа. Если компилятор может выполнить неявное преобразование типа, выдается предупреждение и выполняется необходимое преобразование. В противном случае выдается сообщение об ошибке и компиляция прекращается.
Возможны три варианта использования данного в формуле:
передача параметров в функцию;
унарная операция (логическое отрицание, унарный минус, унарный плюс);
бинарная операция (большинство арифметических операций).
Параметры функций приводятся к типу, указанному в объявлении функции.
Унарные операции не требуют преобразования типа.
Преобразования типов данных в бинарных операциях (в порядке убывания приоритета):
Если один из операндов имеет строковый тип ("Строковый тип. "), другой операнд приводится к типу string. Результат имеет тип string.
Если один из операндов является плавающим числом ("Числа с плавающей точкой. "), другой операнд приводится к типу double. Результат имеет тип double.
Если один из операндов имеет десятичный ("Десятичные числа. ") или денежный ("Денежный тип. ") тип, другой операнд приводится к такому же. Данное правило действует начиная с Атлантис 5.3.08.
Если один из операндов имеет тип comp ("Целочисленные типы. "), другой операнд приводится к такому же.
Результат арифметического выражения имеет следующие типы:
в случае вещественного результата - тип double;
в случае целого результата - типы longInt или comp (если в числе операндов есть тип comp, то результат comp, иначе longInt);
в случае строки - тип string;
в случае булевского результата - тип boolean;
в случае даты - тип date;
в случае времени - тип time;
в случае даты-времени - тип _DateTime.
Для приведения результата к любому другому типу используйте функции приведения типов или оператор преобразования типа.
Приведение типов decimal и money действует начиная с Атлантис 5.3.08.