关于一个数据库字段的小数问题(50分)

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
ACCESS数据库,设计字段为双精度型,小数两位,主要用于填写日常的收费金额,要求是想保留到小数后两位。在编程时遇到如下问题:
1。ADOTable3.FieldByName('单价').AsString := format('%.2f',[strtofloat(bqxmform.Edit5.Text)]);
这种写法虽然能做到保留小数后两位,实际运行也没错误产生,但好象不对,因为数据库设计字段不是文本类型。
2。ADOTable3.FieldByName('销价金额').AsFloat:=ADOTable3.FieldByName('单价').AsFloat*ADOTable3.FieldByName('库存数量').AsFloat ;
这样又不行,小数点后又要大于两位了。
3。有人说用ROUND(数字,2),好象又无法运行。
 
字段有一种money类型,就用它.
 
AsString?
单价不是数值类型吗?
SQL有专门的货币类型Money
 
ADOTable3.FieldByName('销价金额').AsFloat:=FormatFloat(ADOTable3.FieldByName('单价').AsFloat*ADOTable3.FieldByName('库存数量').AsFloat ,...)
 
我的建议,你不管数据库内部小数时几位,你进行数据查询的以后,在程序中指定显示的小数位数就可以。(这是你另外一贴我的回答。)
在你执行完查询
ADOQuery6.ExecSQL;
后加上这样一句就可以。
(ADOQuery6.fieldbyname(ADOQuery6.fields.DisplayName)as TNumericField).displayformat:='0.00';

题外话,你这样的问题我在数据库应用程序中经常遇到,没办法只有使用这样的笨办法处理。进行数据查询之后,对于特殊的字段的显示格式进行强制定义。
如果那位有好的办法,请提出,我可以给分的。
 
这个问题我也遇到。谢。
 
保存的时候最好按数据库默认的位数存(比如14位小数),以免产生累计误差,你每次都format后在存入数据库是不好的,你只管显示的时候是两位数就好了。
在Grid的属性中设置,或format一下就好了。
 
接受答案了.
 
后退
顶部