如何让一个整数保留2位小数

withgogo 2012-05-14 10:12:06
我用的是Delphi 2010 我现在碰到的问题是:
1. 金额算出来是16000.00,通过SQL server 2005得到,但是通过delphi ADOQuery.fields[0].asfloat 后,就变成了16000

2. 我试过如下都不行:
1)fTotal_price:=strToFloat(formatfloat('0.00',Adoquery1.Fields[0].AsFloat));
2)fTotal_price:=RoundTo(16000,-2);

我需要金额显示为后面有两位小数,如何做?

谢谢
...全文
1032 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程保姆 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
下面代码,就是将字符型数据,转换成二位小数字符型数据:

S:= Format('%.2f',[StrToFloat(DBEdit33.Text)]);
[/Quote]
Trim(format('%8.2d',[x]))====x为整数,在后面加两个零
lyhoo163 2012-05-16
  • 打赏
  • 举报
回复

试试以下代码:应该解决问题...

fTotal_price:=Format('%.2f',[Adoquery1.Fields[0].AsFloat]);
lyhoo163 2012-05-16
  • 打赏
  • 举报
回复
下面代码,就是将字符型数据,转换成二位小数字符型数据:

S:= Format('%.2f',[StrToFloat(DBEdit33.Text)]);
还是江筱吧 2012-05-16
  • 打赏
  • 举报
回复
format 最强大了
babydog01 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
formatfloat是有2位小数的,不过結果是字符类型,再用strToFloat转换后面小数的0都去掉了,实际没有用
RoundTo是一样

看看在SQL里面保存的是多少位,asfloat就是多少位,办法:
1.保存的时候,处理小数
2.取值时候,处理小数;

第2种方法,在adoqueryOpen的时候设置
TFloatField(ADOQuery1.Fields[0]).Di……
[/Quote]

就是这个方法了。

fTotal_price的值是16000,要显示或打印成16000还是16000.00都可以的,这只是个显示或打印格式设置的问题。
withgogo 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
在计算中时,无需理会16000.00与16000

在显示给用户时,formatfloat格式化

fTotal_price:=ADOQuery.fields[0].asfloat,得到的值是16000,无小数点后两位。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
楼主自己想想,为什么要这样做
[/Quote]

这是因为显示的时候有同样的问题,比如DBEdit,即使数据库中是16000.00,显示的时候也还是16000,导致报表(我用的是fastreport)中的显示控件如果直接关联到数据库字段的时候,就会只显示
"16000",而不是带2位小数的"16000.00"
gxgyj 2012-05-14
  • 打赏
  • 举报
回复
在计算中时,无需理会16000.00与16000

在显示给用户时,formatfloat格式化

fTotal_price:=ADOQuery.fields[0].asfloat,得到的值是16000,无小数点后两位。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
楼主自己想想,为什么要这样做
withgogo 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
"值还是为16000,无小数点。这是什么原因?"

问个问题, "小数点" 算数还是算字符?
[/Quote]

我的意思是,SQL Server里已做了小数点处理,在SQL Server 上直接执行SQL语句,取出来的是16000.00,但是在delphi中赋值,fTotal_price:=ADOQuery.fields[0].asfloat,得到的值是16000,无小数点后两位。
  • 打赏
  • 举报
回复
你ShowMessage(Format('%0.8f', [fTotal_price]));看看显示的是多少。
zwjchina 2012-05-14
  • 打赏
  • 举报
回复
"值还是为16000,无小数点。这是什么原因?"

问个问题, "小数点" 算数还是算字符?
withgogo 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
formatfloat是有2位小数的,不过結果是字符类型,再用strToFloat转换后面小数的0都去掉了,实际没有用
RoundTo是一样

看看在SQL里面保存的是多少位,asfloat就是多少位,办法:
1.保存的时候,处理小数
2.取值时候,处理小数;

第2种方法,在adoqueryOpen的时候设置
TFloatField(ADOQuery1.Fields[0]).Di……
[/Quote]

数据库里直接运行SQL的话,得到的值是16000.00
fTotal_price:double
但是直接赋值的话,fTotal_price:=Adoquery1.Fields[0].AsFloat;得到的fTotal_price的值还是为16000,无小数点。这是什么原因?
kaikai_kk 2012-05-14
  • 打赏
  • 举报
回复
formatfloat是有2位小数的,不过結果是字符类型,再用strToFloat转换后面小数的0都去掉了,实际没有用
RoundTo是一样

看看在SQL里面保存的是多少位,asfloat就是多少位,办法:
1.保存的时候,处理小数
2.取值时候,处理小数;

第2种方法,在adoqueryOpen的时候设置
TFloatField(ADOQuery1.Fields[0]).DisplayFormat:='0.00';
gxgyj 2012-05-14
  • 打赏
  • 举报
回复
直接formatfloat就好了,为什么还要strtofloat
gxgyj 2012-05-14
  • 打赏
  • 举报
回复
比如DBEdit,即使数据库中是16000.00,显示的时候也还是16000,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
你要在数据源,字段那里设置displayformat

导致报表(我用的是fastreport)中的显示控件如果直接关联到数据库字段的时候,就会只显示
"16000",而不是带2位小数的"16000.00"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fastreport显示标签,右击设置格式
「已注销」 2012-05-14
  • 打赏
  • 举报
回复
16000和16000.00只是显示效果的区别,不是小数点的区别。
gxgyj 2012-05-14
  • 打赏
  • 举报
回复
dbedit的格式,在数据源那里设置好DisplayFormat

fastreport同样有设置格式

2,497

社区成员

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

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