新規プロジェクトを作成し、
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
おそらく
QuickRep を追加するとそのユニット内で
Extended = Double みたいな設定がされているのでは
ないかと思うので
type
Extended = System.Extended;
を追加すれば差はなくなると思う
こうするとどうなる?
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;
KHE00221さん>
type
Extended = System.Extended;
を追加してみたのですが、だめでした。
実は私もExtendedの定義で別を参照しているのかと思い、
A: System.Extendedと表記したりしていたのですが、
直りませんでした。
ありがとうございました。
ちょいと確認さん>
書き込んでいただいた方法でいけました。
これは、クイックレポート内で、浮動小数点の精度・丸め・例外の設定を変更しているということですか。
パラメータの値を調べなければ、いけませんね....とりあえずクリエイト時の$1372で逃げておきます。
ありがとうございました。
解決押しておきます。
ツイート | ![]() |