FmtBcd.pas
は、Delphi XE2で大幅に改訂されました。私のプロジェクトの1つでは、2つの値に2つの除算演算を使用するケースがありますが、2つのバージョンが異なる結果をもたらします。最悪の場合、Delphi XE2はBcd overflow error
を投げることがあります。BcdDivide関数の動作がDelphi XEおよびXE2で異なる
例:デルファイ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
で第2のBcdMultiply
操作を実行すると、Bcd overflow error
が発生します。デルファイXEで同じコードを実行するために、しかし
は、任意の例外プロンプトせずに次の結果が得られます。
0.3333333333
0.11111111108888888889
誰もがこの問題を解決するためのベストプラクティスの方法を提案してくださいもらえますか?
これはXE2のバグであること以外は何も言い切れません。 –
私はhttp://qc.embarcadero.com/wc/qcmain.aspx?d=103106に報告しました –
Win32またはWin64用にコンパイルされた場合、同じ結果が得られますか? –