我很惊讶地看到,浮点值可以除以德尔菲中的一个变体。一个简单的例子可以做什么:
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;
看起来德尔福在进行div
/mod
操作之前对左侧和右侧进行了四舍五入。
我希望上面的代码在编译时在所有 4 行中产生错误,因为我的理解是div/mod 无论如何都不适用于浮点值。显然情况并非如此。
为什么我可以在德尔福中将单身除以变体,它需要什么?
来自表达式中的变体:
如果表达式将变量与静态类型值组合在一起,则静态类型值将自动转换为变量。
这意味着浮点类型文本首先转换为变体。
然后,在执行div/mod 操作之前,将两个变体隐式转换为整数值以匹配运算符。变体类型转换
..它需要什么?
只是为了尽可能通用并完全支持 OLE。