66
FmtBcd.pas
已经在Delphi XE2中进行了大量修改。在我的一个项目中,我有一个案例使用两个Bcd
值的除法操作,但这两个版本产生不同的结果。在最坏的情况下,Delphi XE2可能会抛出一个Bcd overflow error
。在Delphi XE和XE2中BcdDivide函数的行为有所不同
示例:运行在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
包含一个BCD值具有特异性的63位小数。对变量C
执行第二个BcdMultiply
操作将导致Bcd overflow error
。
然而,运行在Delphi XE相同的代码产生以下结果没有任何异常提示:
0.3333333333
0.11111111108888888889
任何人都可以请建议解决这个问题的最佳实践方法是什么?
很难说除了这是XE2中的一个错误之外的其他任何东西。 – 2012-02-03 02:05:33
我已经报告给http://qc.embarcadero.com/wc/qcmain.aspx?d=103106 – 2012-02-03 02:10:39
编译为Win32或Win64时的结果相同吗? – 2012-02-03 02:38:06