什么是Delphi的第一个版本允许类似双重类型(10)

gam*_*ter 3 delphi casting

Delphi Tokyo 64-bit将使用单精度计算一些数学函数,如果使用整数常量调用,例如

{$apptype console}
uses
  system.math;
var
  d: double;
begin
  d := 10;
  writeln(log2(10):20:16, log2(10.0):20:16,log2(d):20:16);
end.
Run Code Online (Sandbox Code Playgroud)

将打印3.3219280242919923 3.3219280948873626 3.3219280948873626.

我被告知在Delphi东京64位刷新非正常数字为零?,我应该使用类型转换double(10)来解决此功能.问题是,从我可用的Delphi版本开始,只有东京允许这种类型转换(IMO,即使文档似乎禁止它,说只允许变体被转换为真实类型).

我知道,XE4(VER250)给出了错误Error: E2089 Invalid typecastdouble(10),但我不知道VER260 .. VER310信息.

那么第一个允许类型转换的Delphi版本double(10)呢?

LU *_* RD 5

XE7失败了.XE8失败了....在Delphi 10.1柏林失败.

所以它似乎是在东京10.2中引入的.


在以前的版本从(XE4),可以使用在整数辅助方法sysutils的:

10.ToDouble 
Run Code Online (Sandbox Code Playgroud)

在之前的版本中,使用变体转换:

VarAsType(10,varDouble)
Run Code Online (Sandbox Code Playgroud)

一个适用于所有版本的函数:

function DoubleVal( x : Double) : Double; inline;
begin
  Result := x;
end; 
Run Code Online (Sandbox Code Playgroud)