截取除运算结果小数点后三位(100分)

  • 主题发起人 主题发起人 hqh1234
  • 开始时间 开始时间
H

hqh1234

Unregistered / Unconfirmed
GUEST, unregistred user!
我建有一Paradox库用于统计良品率,统计表单有Query1、Datasour和Dbgrid控件。
在程序中如下实现:
begin
Query1.close;
Query1.sql.clear;
Query1.sql.add('select 机种,sum(良品数)/sum(完成数)as 良品率);
Query1.sql.add('from mfg1.db);
Query1.sql.add('group by 机种);
Query1.sql.add('order by 机种);
end;
但计算结果良品率有15位,如何只截取小数点后三位,请高手赐教!

 
Query1.sql.add('select 机种,(cast(cast(sum(良品数)*1000/sum(完成数)) as long)/1000 as number) as 良品率);

我没试过,你试一下。

 
940801 谢谢你的答案,可是我编译成功后执行出现以下提示:
Invalid use of keyword token:)as,
我的完整程序是:
Procedure TForm1.BitBtn1click(sender:Tobject);
begin
Query1.close;
Query1.sql.clear;
Query1.sql.add('select 机种,sum(良品数)/sum(完成数)as 良品率);
Query1.sql.add('from mfg1.db);
Query1.sql.add('where (日期>=:fdate)and日期<=:tdate)');
Query1.sql.add('group by 机种);
Query1.sql.add('order by 机种);
Query1.ParambyName('fdate').asdatetime:=DateTimePicker1.date;
Query1.ParambyName('fdate').asdatetime:=DateTimePicker1.date;
end;

 
如果是在DBGRid里面显示,只需要设置该字段的显示放式为0.000即可,DBGrid自动
完成转化,或者在Query中该字段的gettext中使用Round函数,先用字段的值乘1000,然后
Round,再除于1000即可.
 
你是要显示还是要再作处理?
1、若是显示,只需加一句:
Query1.FielDByName('良品率').EditFormat:='0.000';
就可以了。

2、若要再处理,则自己处理一下就可以了。

 
yck :
不仅要显示,还要进行图形统计,能否具体些,谢谢!
 
用FORMAT函数,若要处理,再进行相应的转换.
 
上帝救救我!已经两天了,还没有完整答案.
 
你把加入了 cast 函数报错的源程序贴出来看看
 
大家好:
问题解决了,采用940801的cast 函数,具体语句如下:
Query1.sql.add('select 机种,(cast(cast(sum(良品数)*1000/sum(完成数)as integer) as float)/1000 as 良品率);

 
在写数据库时,就只取三位,可以用trunc(x*1000)/1000实现!
 
tianrei
query构件sql语句中可以应用trunc函数吗?
 
后退
顶部