gpt4 book ai didi

delphi - 在不同的 Delphi 安装上从 double 型到货币型的显式转换的不同行为

转载 作者:行者123 更新时间:2023-12-02 11:16:57 26 4
gpt4 key购买 nike

这就像人们期望的在我们的本地计算机上运行一样:

var
c : Currency;
f : Double;
begin
f := 0.12345;
c := Currency(f);
OutputDebugString(PChar(FloatToStrF(c, ffNumber, 18, 4)));
end;
Debug Output: 0,1235

在我们的 CI 机器上我们得到:

Debug Output: 459.355.993.064.714,7130

这是为什么?

最佳答案

我们注意到 Delphi Berlin 和 Tokyo 之间看似没有记录的行为变化,后者在我们的机器上运行,前者在我们的 CI 服务器上运行。在柏林之前的版本中,从 double 型到货币的显式转换并不像人们所期望的那样:

MyFormU.pas.43: f  := 0.12345;
005CE74D C745D07CF2B050 mov [ebp-$30],$50b0f27c
005CE754 C745D46B9ABF3F mov [ebp-$2c],$3fbf9a6b
MyFormU.pas.44: c := Currency(f);
005CE75B 8B45D0 mov eax,[ebp-$30]
005CE75E 8945E0 mov [ebp-$20],eax
005CE761 8B45D4 mov eax,[ebp-$2c]
005CE764 8945E4 mov [ebp-$1c],eax
MyFormU.pas.45: c2 := f;
005CE767 DD45D0 fld qword ptr [ebp-$30]
005CE76A D80D80E85C00 fmul dword ptr [$005ce880]
005CE770 DF7DD8 fistp qword ptr [ebp-$28]
005CE773 9B wait

请注意,隐式转换执行正确的 fp 乘法,将 double 转换为 Int64(货币按此方式存储),而显式转换则不然。

从东京开始,两个 Actor 生成的 asm 是相同的。

关于delphi - 在不同的 Delphi 安装上从 double 型到货币型的显式转换的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55750788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com