var
a:double;
s:string;
begin
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);
end;大家猜猜结果是什么:8.07000000000000028为什么呢?Delphi怎么这么奇怪?
a:double;
s:string;
begin
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);
end;大家猜猜结果是什么:8.07000000000000028为什么呢?Delphi怎么这么奇怪?
解决方案 »
- delphi VFP adoquery.savetofile???
- 请教一个计算字段的问题
- 在多线程调用 端口扫描中,如何处理 N个IP+N个Port的情况?我的笨方法是一个ip+端口 启动一个线程但总不能一次启动1千以上个线程运转的
- 为什么我的web server application程序没有错误,发布后(本机调试)显示该网页无法显示?
- 字符串操作的趣问?
- 哪位大侠能提供矢量图设计的例程!
- 关于木马免杀和反启发,很底层的东西,高手进
- 哪里有面向对象pascal基础教程呀
- IDFTP上传下载没响应问题
- 很怪的问题:CreateDir('C:\temp')这是例子,可以实现.但CreateDir('C:\temp\xxx')就有问题???????难道只能建一层子目录??????
- 控制台问题2个
- 如何实现ADO自动连接SQL
a := 8.07000000000000028;s := formatfloat('#.####################',a);s显示都还是8.07,为什么呢?
a := 8.07000000000000028;
-----------------------------------------------
a := 8.07000000000000028;与使用ADOConnection.Open有什么关系?楼主没有说.假设a是从数据表里提取出来的,那请楼主看一下该字段的精度是多少.
s := formatfloat('#.####################',a);
showmessage(s);//显示8.07000000000000028
ADOConnection.Open
a := 8.07;
s := formatfloat('#.####################',a);
showmessage(s);//显示8.07
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;使用format()转换,既使你发现的adoconnection问题,也不复存在了。
你的问题,首先是你的精度超出了double的范围。
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;
以上如何实现上下都是8.07000000000000028??????
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;显示8.07的地方也显示8.07000000000000028,意思就是即使错也错的一样!我个人理解,vADOConnection.Open调用了MS的库文件,所以有效位数之后的数字直接删除了。有什么好方法来不删除呢?