クイックレポートと小数の値

解決


フジ  2008-07-31 00:33:41  No: 31408

新規プロジェクトを作成し、
Form1のクリックイベントに

次のソースを張り付けて実行し、フォームをクリックすると、

procedure TForm1.FormClick(Sender: TObject);
var
  A: Extended;
  B: Extended;
  C: Extended;
begin
  A := 0.000101;
  B := 1;
  C := A + B;
  showMessage('A' + FormatFloat('0.0000000000000000000000',C) + 'A');
end;

結果
---------------------------
Project1
---------------------------
A1.0001010000000000000000A
---------------------------
OK   
---------------------------

次にForm1に
QuickRep1: TQuickRep;
を張り付けて、実行しクリックすると、

---------------------------
Project1
---------------------------
A1.0001009999999998400000A
---------------------------
OK   
---------------------------

この差はいったいなんなんでしょうか?
よろしくお願いします。

WindowsXp SP3
Delphi 2007
Quickreport 4.07 Pro


KHE00221  2008-07-31 09:56:08  No: 31409

おそらく 

QuickRep を追加するとそのユニット内で
Extended = Double みたいな設定がされているのでは
ないかと思うので

type
  Extended = System.Extended;

を追加すれば差はなくなると思う


ちょいと確認  2008-07-31 17:22:04  No: 31410

こうするとどうなる?

var
  Saved8087CW: Word;
  A: Extended;
  B: Extended;
  C: Extended;
begin
  Saved8087CW := Default8087CW;
  Set8087CW($133f);

  A := 0.000101;
  B := 1;
  C := A + B;
  showMessage('A' + FormatFloat('0.0000000000000000000000',C) + 'A');

  Set8087CW(Saved8087CW);
end;


フジ  2008-07-31 19:03:56  No: 31411

KHE00221さん>
type
  Extended = System.Extended;
を追加してみたのですが、だめでした。
実は私もExtendedの定義で別を参照しているのかと思い、
A: System.Extendedと表記したりしていたのですが、
直りませんでした。
ありがとうございました。

ちょいと確認さん>
書き込んでいただいた方法でいけました。
これは、クイックレポート内で、浮動小数点の精度・丸め・例外の設定を変更しているということですか。
パラメータの値を調べなければ、いけませんね....とりあえずクリエイト時の$1372で逃げておきます。
ありがとうございました。


フジ  2008-07-31 22:16:33  No: 31412

解決押しておきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加