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