delphi 数据库提取浮点型数据的问题

wuaizhonghua 2008-06-08 08:04:58
我的数据库中的数据是单精度固定小数点后三位小数的 但是我提取出来转换成文本格式的时候,在txt文件里面 小数点后面就是11位了请问这个问题如何解决 我的程序如下 请指点一下
procedure TForm2.Button3Click(Sender: TObject);
var
strlist1:tstringlist;
str:string;
i:integer;
begin
str:='';
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select * from ygprint where 井号='''+edit2.text+''' order by 归位深度 asc');
open;
(adoquery2.FieldByName('油质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('油质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('胶质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('胶质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('沥青质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('沥青质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('水发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('水荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('色差') as TFloatField).displayFormat := '0.00';
first;
if savedialog1.Execute then
begin
strlist1:=tstringlist.Create;
str:=fields[4].FieldName;
for i:=5 to adoquery2.Fields.Count-1 do
str:=str+' '+fields[i].FieldName;
strlist1.Add(str);
while not eof do
begin
str:='';
str:=fieldbyname('归位深度').AsString+' '+ fieldbyname('油质波长均值').AsString +' '+fieldbyname('油质发光面积').AsString +' '+fieldbyname('油质荧光亮度').AsString+' '+ fieldbyname('胶质波长均值').AsString +' '+fieldbyname('胶质发光面积').AsString +' '+fieldbyname('胶质荧光亮度').AsString+' '+ fieldbyname('沥青质波长均值').AsString +' '+fieldbyname('沥青质发光面积').AsString +' '+fieldbyname('沥青质荧光亮度').AsString+' '+ fieldbyname('水波长均值').AsString +' '+fieldbyname('水发光面积').AsString +' '+fieldbyname('水荧光亮度').AsString+' '+ fieldbyname('色差').AsString +' '+fieldbyname('含油性评价指数').AsString ; //提取数据库中的信息

strlist1.Add(str);
next;
end;
strlist1.SaveToFile(savedialog1.FileName);

strlist1.Free;
end;
end;
end;
...全文
221 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
GDTOPONE 2008-06-08
  • 打赏
  • 举报
回复
来一个完整的:

procedure TForm2.Button3Click(Sender: TObject);
var
strlist1:tstringlist;
str:string;
i:integer;
begin
str:='';
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select * from ygprint where 井号='''+edit2.text+''' order by 归位深度 asc');
open;
(adoquery2.FieldByName('油质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('油质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('胶质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('胶质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('沥青质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('沥青质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('水发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('水荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('色差') as TFloatField).displayFormat := '0.00';
first;
if savedialog1.Execute then
begin
strlist1:=tstringlist.Create;
str:=fields[4].FieldName;
for i:=5 to adoquery2.Fields.Count-1 do
str:=str+' '+fields[i].FieldName;
strlist1.Add(str);
while not eof do
begin
str:='';
str:=Gtow(fieldbyname('归位深度').AsString)+' '
+Gtow(fieldbyname('油质波长均值').AsString)+' '
+Gtow(fieldbyname('油质发光面积').AsString)+' '
+Gtow(fieldbyname('油质荧光亮度').AsString)+' '
+Gtow(fieldbyname('胶质波长均值').AsString)+' '
+Gtow(fieldbyname('胶质发光面积').AsString)+' '
+Gtow(fieldbyname('胶质荧光亮度').AsString)+' '
+Gtow(fieldbyname('沥青质波长均值').AsString)+' '
+Gtow(fieldbyname('沥青质发光面积').AsString)+' '
+Gtow(fieldbyname('沥青质荧光亮度').AsString)+' '
+Gtow(fieldbyname('水波长均值').AsString)+' '
+Gtow(fieldbyname('水发光面积').AsString)+' '
+Gtow(fieldbyname('水荧光亮度').AsString)+' '
+Gtow(fieldbyname('色差').AsString)+' '
+Gtow(fieldbyname('含油性评价指数').AsString); //提取数据库中的信息


strlist1.Add(str);
next;
end;
strlist1.SaveToFile(savedialog1.FileName);

strlist1.Free;
end;
end;
end;


wlxc 2008-06-08
  • 打赏
  • 举报
回复
连成字符串时可以格式化一下,如:Format('%.3f', [7.0033003])
GDTOPONE 2008-06-08
  • 打赏
  • 举报
回复
str:=Gtow(str);{--------------新加入了这句}此句DEL掉
GDTOPONE 2008-06-08
  • 打赏
  • 举报
回复
一时不小心处理错了修正以下的:

str:=Gtow(fieldbyname('归位深度').AsString)+' '+Gtow(fieldbyname('油质波长均值').AsString) +' '+Gtow(fieldbyname('油质发光面积').AsString) +' '+Gtow(fieldbyname('油质荧光亮度').AsString)+' '+Gtow(fieldbyname('胶质波长均值').AsString) +' '+Gtow(fieldbyname('胶质发光面积').AsString) +' '+Gtow(fieldbyname('胶质荧光亮度').AsString)+' '+Gtow(fieldbyname('沥青质波长均值').AsString) +' '+Gtow(fieldbyname('沥青质发光面积').AsString) +' '+Gtow(fieldbyname('沥青质荧亮度').AsString)+' '+Gtow(fieldbyname('水波长均值').AsString)+' '+Gtow(fieldbyname('水发光面积').AsString) +' '+Gtow(fieldbyname('水荧光亮度').AsString)+' '+Gtow(fieldbyname('色差').AsString) +' '+Gtow(fieldbyname('含油性评价指数').AsString) ; //提取数据库中的信息
GDTOPONE 2008-06-08
  • 打赏
  • 举报
回复
其实有点不明白,只是任想像看能否为你解决问题:
1.相关函数:

function Gtow(s:string):string;
begin
{例如:S=12.00000000000,返回12.000}
Result:=copy(s,1,pos('.',s)-1)+copy(s,pos('.',s),4);
end;


2.处理:

procedure TForm2.Button3Click(Sender: TObject);
var
strlist1:tstringlist;
str:string;
i:integer;
begin
str:='';
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('select * from ygprint where 井号='''+edit2.text+''' order by 归位深度 asc');
open;
(adoquery2.FieldByName('油质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('油质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('胶质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('胶质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('沥青质发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('沥青质荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('水发光面积') as TFloatField).displayFormat := '0.000';
(adoquery2.FieldByName('水荧光亮度') as TFloatField).displayFormat := '0.00';
(adoquery2.FieldByName('色差') as TFloatField).displayFormat := '0.00';
first;
if savedialog1.Execute then
begin
strlist1:=tstringlist.Create;
str:=fields[4].FieldName;
for i:=5 to adoquery2.Fields.Count-1 do
str:=str+' '+fields[i].FieldName;
strlist1.Add(str);
while not eof do
begin
str:='';
str:=fieldbyname('归位深度').AsString+' '+ fieldbyname('油质波长均值').AsString +' '+fieldbyname('油质发光面积').AsString +' '+fieldbyname('油质荧光亮度').AsString+' '+ fieldbyname('胶质波长均值').AsString +' '+fieldbyname('胶质发光面积').AsString +' '+fieldbyname('胶质荧光亮度').AsString+' '+ fieldbyname('沥青质波长均值').AsString +' '+fieldbyname('沥青质发光面积').AsString +' '+fieldbyname('沥青质荧光亮度').AsString+' '+ fieldbyname('水波长均值').AsString +' '+fieldbyname('水发光面积').AsString +' '+fieldbyname('水荧光亮度').AsString+' '+ fieldbyname('色差').AsString +' '+fieldbyname('含油性评价指数').AsString ; //提取数据库中的信息

str:=Gtow(str);{--------------新加入了这句}

strlist1.Add(str);
next;
end;
strlist1.SaveToFile(savedialog1.FileName);

strlist1.Free;
end;
end;
end;
1.4*ColEditor增加了对GRIDEH是否可以排序进行控制,但前题是单元要引用EhLibAdO*增加WaitForm,在费时的操作过程中使用,效果不错!*增加最优化网格宽度功能,让网格栏位的宽度根据其自身的数据最优化智能筛选BUG*待选字段值为空时,会重复增加进去*浮点型字段值比较有问题*Boolean字段型比较有问题,只认是与否1.3加入万能查询,以前是从胜天进销存中提取出来的,但我的速度快很多倍,因为我用了DisableControls,嘿嘿!*后来发现,智能过滤应该是对任何数据都同样功能强大,因为它不是用FILTER属性,而是用ONFILTERRECODE事件来进行过滤的*对智通过滤做了一些改进,改掉一些BUG1.2增加了智能过滤功能,对任意一DATASET都可以!此功能参考QLFilter,在此表示感谢!以后会陆续增加一些MIS开发的常用功能组件或函数,请大家多多关注对了,几个按钮的ICON我暂时没有,没放上去丑了点,请大家自已加上去了!1.1ColEditor 更易于使用了,BUG基本排除!1.0本程序演示了如何使用编辑器在运行期设置表格的一些常用参数需要使用到Ehlib控件,最好使用3.6版本,旧版本也适用!使用前请双击本目录下的DB.UDL连接数据,连接完成后即可选择数据表进行演示!在表格上按右键,即可出现功能菜单,点击进入!程序应该适用于各版本的DELPHI,但由于条件有限未做测试!希望大家多多交流,能得到大家的各种有用的源代码!本程序的全部代码您都可以任意使用,但源代码的最前面几行的注释不可以改变,否则您将无权使用!如有修改成更好用的版本,烦请给我一份,以便学习提高!jacky xuQQ:112876992Email:kingjit@163.comMSN:kingjit@163.comskype:kingjit@163.comhttp: www.kingjit.com======================您的回复就是我的动力,再没有人回复,就拉倒吧======================
保存到数据的功能,建议使用EHLIB的另一个控件:PropStorageEh用它再搭配STREAM可以实现存储到数据中!它将在我的1.5版本中实现.1.4*ColEditor增加了对GRIDEH是否可以排序进行控制,但前题是单元要引用EhLibAdO*增加WaitForm,在费时的操作过程中使用,效果不错!*增加最优化网格宽度功能,让网格栏位的宽度根据其自身的数据最优化智能筛选BUG*待选字段值为空时,会重复增加进去*浮点型字段值比较有问题*Boolean字段型比较有问题,只认是与否1.3加入万能查询,以前是从胜天进销存中提取出来的,但我的速度快很多倍,因为我用了DisableControls,嘿嘿!*后来发现,智能过滤应该是对任何数据都同样功能强大,因为它不是用FILTER属性,而是用ONFILTERRECODE事件来进行过滤的*对智通过滤做了一些改进,改掉一些BUG1.2增加了智能过滤功能,对任意一DATASET都可以!此功能参考QLFilter,在此表示感谢!以后会陆续增加一些MIS开发的常用功能组件或函数,请大家多多关注对了,几个按钮的ICON我暂时没有,没放上去丑了点,请大家自已加上去了!1.1ColEditor 更易于使用了,BUG基本排除!1.0本程序演示了如何使用编辑器在运行期设置表格的一些常用参数需要使用到Ehlib控件,最好使用3.6版本,旧版本也适用!使用前请双击本目录下的DB.UDL连接数据,连接完成后即可选择数据表进行演示!在表格上按右键,即可出现功能菜单,点击进入!程序应该适用于各版本的DELPHI,但由于条件有限未做测试!希望大家多多交流,能得到大家的各种有用的源代码!本程序的全部代码您都可以任意使用,但源代码的最前面几行的注释不可以改变,否则您将无权使用!如有修改成更好用的版本,烦请给我一份,以便学习提高!jacky xuQQ:112876992Email:kingjit@163.comMSN:kingjit@163.comskype:kingjit@163.comhttp: www.kingjit.com==========您的回复就是我的动力,再没有人回复,就拉倒吧==========
1.4 *ColEditor增加了对GRIDEH是否可以排序进行控制,但前题是单元要引用EhLibAdO *增加WaitForm,在费时的操作过程中使用,效果不错! *增加最优化网格宽度功能,让网格栏位的宽度根据其自身的数据最优化 智能筛选BUG *待选字段值为空时,会重复增加进去 *浮点型字段值比较有问题 *Boolean字段型比较有问题,只认是与否 1.3 加入万能查询,以前是从胜天进销存中提取出来的,但我的速度快很多倍,因为我用了DisableControls,嘿嘿! *后来发现,智能过滤应该是对任何数据都同样功能强大,因为它不是用FILTER属性,而是用ONFILTERRECODE事件来进行过滤的 *对智通过滤做了一些改进,改掉一些BUG 1.2 增加了智能过滤功能,对任意一DATASET都可以!此功能参考QLFilter,在此表示感谢! 以后会陆续增加一些MIS开发的常用功能组件或函数,请大家多多关注 对了,几个按钮的ICON我暂时没有,没放上去丑了点,请大家自已加上去了! 1.1 ColEditor 更易于使用了,BUG基本排除! 1.0 本程序演示了如何使用编辑器在运行期设置表格的一些常用参数 需要使用到Ehlib控件,最好使用3.6版本,旧版本也适用! 使用前请双击本目录下的DB.UDL连接数据,连接完成后即可选择数据表进行演示! 在表格上按右键,即可出现功能菜单,点击进入! 程序应该适用于各版本的DELPHI,但由于条件有限未做测试! 希望大家多多交流,能得到大家的各种有用的源代码! 本程序的全部代码您都可以任意使用,但源代码的最前面几行的注释不可以改变,否则您将无权使用! 如有修改成更好用的版本,烦请给我一份,以便学习提高!

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧