保留小数点后位数问题(200分)

  • 主题发起人 主题发起人 ltp
  • 开始时间 开始时间
L

ltp

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手你们好!请教大家一个问题:
我现在在做一个数据库,其中有一个表,里面有好几个浮点型字段,
如单价(unitprice)、金额(nmoney),我想在dbgrid中显示出来,并且
这些字段都保留小数点后3位,不要四舍五入(若displayformat设为0.000时
会四舍五入。)
例如:某一金额值:100.2225,在dbgrid中显示100.222
有一种方法是每一个数值都减去0.0005,但我的那些浮点型很多,总不
能每一个都这样做吧。
特向各位高手请教,谢谢!
 
呵呵,那不如乘以1000,在用floor()截去小数位,在乘以1000
是不是还有trunc什么的
 
方法1、在数据存贮时就把它处理掉
方法2、用计算字段
方法3、用SQL把小数位去掉,生成的查询表就是三位小数,而数据库中不变
 
to ltp:
你可以在相应字段的 OnGetText 事件中处理,如:
procedure TForm1.Table1UNITPRICEGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if Sender = Table1UNITPRICE then
if Sender.IsNull then
Text := '0'
else
Text := FormatFloat('0.###',Trunc(Sender.AsFloat * 1000)/1000);//三位小数,不四舍五入
end;
 
在表格的DrawColumnCell过程中处理掉,formatfloat('#.000',value);
 
检索 "小数"

在[标题关键字]中输入 小数
然后 检索 !
哈哈!一大堆答案.选你有用的!!
 
只能自己处理:乘1000然后trunc,除1000。
 
本人等了很久,自己想了一下,发现这样做可行
对此问题,您可以这样(每个数截取小数点后3位)
with query1 do
begin
close;
sql.clear;
sql.add('select *,(int(unitprice*1000)/1000) as unitprice1,
(int(nmoney*1000)/1000) as nmoney1 from 表名)
open;
end;
难后再设unitprice1、nmoney1的displayformat属性为:0.000
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
812
爱音乐的孩子是小白
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部