var
a:double;
s:string;
begin
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);
end;
大家猜猜结果是什么:8.07000000000000028
为什么呢?Delphi怎么这么奇怪?
...全文
27616打赏收藏
关于精度简单而又奇怪的问题!!!大家帮忙!
var a:double; s:string; begin a := 8.07; s := formatfloat('#.####################',a); showmessage(s); end; 大家猜猜结果是什么:8.07000000000000028 为什么呢?Delphi怎么这么奇怪?
var
a:double;
s:string;
vADOConnection:Variant;
begin
a := 8.07;
s := formatfloat('#.################',a);//s显示8.07000000000000028
vADOConnection := CreateOleObject('ADODB.Connection');
vADOConnection.ConnectionString := 'Driver={Firebird/InterBase(r) driver};pwd=masterkey;Uid=SYSDBA;database=C:\123.GDB';
try
vADOConnection.Open;
Except
end;
a := 8.07;
s := formatfloat('#.################',a);//s显示8.07
end;
Double类型:表示范围:±5.0 * 10^-324 ~ 1.7 * 10^308 有效位:15~16位。所以,把你的formatFloat这样改一下,试试:
var
a : double;
s:string;
begin
a := 8.07;
s := formatfloat('#.##############',a);//注意,小数点后15个#
edit1.text := s ;//显示8.07
s := format('%1.15f',[a]);
edit2.text := s ; //显示8.070000000000000 建议用format()
end;
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);//显示8.07000000000000028
ADOConnection.Open
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);//显示8.07
我一旦使用ADOConnection.Open之后
a := 8.07000000000000028;
-----------------------------------------------
a := 8.07000000000000028;与使用ADOConnection.Open有什么关系?楼主没有说.