use*_*960 5 delphi floating-point literals
虽然e默认情况下工作的情况我想更改文字的默认转换,0.1以允许在r没有任何代码修改的情况下工作.这可能通过编译器选项,编译器指令或其他任何东西吗?
procedure Test;
var
s : Single;
r : Real;
d : Double;
e : Extended;
begin
s := 0.1;
if (s = 0.1) then ShowMessage('s matched'); // fail
r := 0.1;
if (r = 0.1) then ShowMessage('r matched'); // fail
d := 0.1;
if (d = 0.1) then ShowMessage('d matched'); // fail
e := 0.1;
if (e = 0.1) then ShowMessage('e matched'); // pass
end;
Run Code Online (Sandbox Code Playgroud)
没有编译器开关可以满足您的需求.问题是32位Windows编译器将浮点文字表示为10字节扩展精度值.并且因为0.1不完全可表示,所以不等于8字节双精度表示0.1.
该文件说:
如果constantExpression是实数,则其类型为Extended.
但是,您可以使用类型常量来获得所需的结果.例如:
const
TenthDouble: Double = 0.1;
var
d: Double;
....
d := 0.1;
if d = TenthDouble then
....
Run Code Online (Sandbox Code Playgroud)
通过使用类型化常量,我们可以强制编译器使常量为8字节双精度表示形式0.1.