【发布时间】:2012-02-25 17:11:42
【问题描述】:
FmtBcd.pas 已在 Delphi XE2 中进行了广泛修改。在我的一个项目中,我有一个案例对两个 Bcd 值使用除法运算,但两个版本产生不同的结果。在最坏的情况下,Delphi XE2 可能会抛出一个Bcd overflow error。
示例:在 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 overflow error。
但是,在 Delphi XE 中运行相同的代码会产生以下结果,没有任何异常提示:
0.3333333333
0.11111111108888888889
任何人都可以提出解决此问题的最佳实践方法吗?
【问题讨论】:
-
除了这是 XE2 中的一个错误之外,很难说别的。
-
为 Win32 或 Win64 编译时结果相同?
-
@François: XE2 中的 Win32 和 Win64 产生相同的结果。
-
很抱歉,您的问题是什么?你只是在发表声明。如果提供的库有问题,那么您可以简单地重新实现使用过的函数。或者使用工作版本中的那些。随便。
标签: delphi delphi-xe delphi-xe2