Delphi Tips 
-----------------------------

0299  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2000/04/06 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2000/04/06 osamu 編集
Currency型の小数演算結果が不正

Currency型で小数点以下の計算をすると、環境によっては結果が期待した値にならない場合があるそうです。

[例]

procedure TForm1.Button1Click(Sender: TObject);
var
  num1, num2: Currency;
  ret: string;
begin
  num1 := StrToCurr('888888888888888.8888');
  num2 := StrToCurr('0.8888');
  ret := FormatCurr('#,##0.0000', num1 - num2);
  ShowMessage(ret);
end;


この結果が『888888888888888.0128』になります。

この問題を解決するには、Currency や Extended 型の演算を行う前に、Set8087CW(Default8087CW); なるおまじないを入れておけばよいらしい。プロジェクトソースの一行目にでも書いておきましょう。

未確認ながら Delphi4 では治っていると言う報告があります。

[例]

begin
  Set8087CW(Default8087CW);
  num1 := StrToCurr('888888888888888.8888');
参照: [Delphi-ML:47431] <バグ> <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp