#delphi
С удивлением обнаружил, что числа с точкой могут быть целочисленно поделены на Variant в Delphi. Простой пример: var v: Variant; begin v := 2.3; Tag := 5.1 div v; // 2 Tag := 5.1 mod v; // 1 Tag := 5.1 div 2; // [dcc32 Error] E2015 Operator not applicable to this operand type Tag := 5.1 mod 2; // [dcc32 Error] E2015 Operator not applicable to this operand type end; Похоже, что Delphi округляет левую и правую часть выражения перед выполнением div/mod операторов. Я полагал, что вышенаписанный код вызовет ошибку при компилировании всех 4 строк, т.к. в моем понимании, операторы div/mod не применимы к числам с точкой от слова "совсем". Похоже что это не так. Почему Delphi дает мне целочисленно поделить число с точкой на Variant, для чего нужна эта возможность?
Ответы
Ответ 1
В справке по типу Variant есть следующее If an expression combines variants with statically-typed values, the statically-typed values are automatically converted to variants. Если в выражении используются переменные вариантных типов и статически-типизированные значения, статически-типизированные значения автоматически приводятся к вариантному типу. В справке по операторам Except for ^, is, and in, all operators can take operands of type Variant; Все операторы, кроме ^, is и in могут принимать операнды с типом Variant. Из этого следует, что в выражениях Tag := 5.1 div v; // 2 Tag := 5.1 mod v; // 1 число 5.1 было приведено к типу Variant При использовании типа Variant в операциях, если исходное значение не подходит для операции оно конвертируется в подходящее по определенным правилам. Правила указаны в специальной таблице.
Комментариев нет:
Отправить комментарий