小数位数问题(50)

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

leader47

Unregistered / Unconfirmed
GUEST, unregistred user!
实际数据是 0.1显示是 0.0999999,或者显示成: 0.1000000001111类似这样的情况,有的会这样显示,有的就正常显示。请问怎样设计字段类型和程序 可以解决这个显示问题?
 
什么数据库?把字段的小数位数设置为3位。
 
数据库:sql2000想要正确显示,不要显示成 0.099。
 
如果是正数的话,数据类型改成Cardinal
 
for i := 0 to DBGridEh_flz.DataSource.DataSet.FieldCount - 1 do //千分位分隔符,小数显示两位 begin if DBGridEh_flz.DataSource.DataSet.FIELDS.DATATYPE = FTFLOAT then begin TFLOATFIELD(DBGridEh_flz.DataSource.DataSet.FIELDS).DISPLAYFORMAT := '#,##0.00'
end
end;
 
字段类型更改为 Decimal(10,2)。不会显示为0.099的,除非你保存的就是这个值。
 
如果小数位不超过4位,就用MONEY类型。
 
同意Tuatara看法,这个不仅是显示的问题,如果不使用货币型的话,可能出现显示正常但结果不正常的情况,比如两数分别是1和2,相加的结果却不是3
 
numberric 字段就可以
 
楼上说的对~~
 
就算把 字段类型更改为 Decimal(10,2),但在程序中: clientdataset.fieldbyname('字段').asfloat 时,也会出现 0.09999这样的情况。只是将它折断,只显示2位小数。还是不能正常显示: 0.1
 
你是把clientdataset.fieldbyname('字段').asfloat 赋给double类型变量?试试将那个变量类型更改为Currency类型看看。以前也遇到过这种情况。
 
>>fieldbyname('字段').asfloat 时,也会出现 0.09999这样的情况 呵呵,你只要将Decimal转成了Float——又变成了基于二进制的浮点数,那么问题还是不会消除。大可以直接用 AsString 来显示啊... 为什么抱着浮点数不放呢? Delphi的原生数据类型没有Decimal,但是DataSet提供了这种数据类型——那就放弃原生的,用DataSet的数据类型——就这么简单。
 
如果是成本金额,建议用FLOAT字段.运算时,注意小数点方面的判断.
 
To creation-zy:因为要计算,所以要转换成数值型。strtofloat(clientdataset.fieldbyname('字段').asstring) 会出现那种情况吗?如果这样可以的话,我想总结一下楼上各位的。数据库字段类型:Decimalclientdataset字段类型:bcd显示时:clientdataset.fieldbyname('字段').asstring计算时:strtofloat(clientdataset.fieldbyname('字段').asstring)不知道对不对,请指教!由于小数位数超过4位,所以不取用金额类型。
 
多人接受答案了。
 
后退
顶部