gpt4 book ai didi

delphi - BcdDivide 函数在 Delphi XE 和 XE2 中的行为不同

转载 作者:行者123 更新时间:2023-12-03 14:32:27 24 4
gpt4 key购买 nike

FmtBcd.pas已在Delphi XE2中进行了广泛的修改和重写。在我的一个项目中,我有一个对两个 Bcd 值使用除法运算的情况,但两个版本产生不同的结果。在最坏的情况下,Delphi XE2 可能会抛出 Bcd 溢出错误

示例:在 Delphi XE2 控制台应用程序中运行以下代码:

var A, B, C, D: TBcd;
begin
A := StrToBcd('1');
B := StrToBcd('3');
BcdDivide(A, B, C);
WriteLn(BcdToStr(C));

try
BcdMultiply(C, C, D);
WriteLn(BcdToStr(D));
except
on E: Exception do
WriteLn(E.Message);
end;

ReadLn;
end.

上面的输出将是:

0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow

变量C包含一个具有63个小数位的Bcd值。对变量 C 执行第二次 BcdMultiply 运算将导致 Bcd 溢出错误

但是,在 Delphi XE 中运行相同的代码会产生以下结果,并且没有任何异常提示:

0.3333333333
0.11111111108888888889

有人可以建议解决此问题的最佳实践方法吗?

最佳答案

问题中的代码在 XE2 更新 4 中产生预期的输出。请注意,更新 3 产生错误的输出,因此显然更新 4 已修复该问题。此外,XE3 产生预期的输出。

关于delphi - BcdDivide 函数在 Delphi XE 和 XE2 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122646/

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