在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
用了这些年的Delphi,竟然对Currency及TBCDField一知半解,下文给了很好的讲解,值得一读。 一. BCD类型 BCD即Binary-Coded Decimal?,在Delphi中,BCD字段类型可以精确保存浮点数据类型。 Delphi支持的BCD码的数据类型名为TBCD,它的定义如下:
对BCD的支持是在FMTBcd单元中,所以要使用BCD函数,则需要引用此单元。 Delphi的BCD函数有:
二. Currency类型 和SQL SERVER中money类型一模一样,Delphi中Currency类型: 1) 占用8个字节。 2) 总是4位小数。 3) 范围为:-2^63 ~ 2^63-1(-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807)。存储格式相当于总是乘以10000,然后按整数格式保存。 三. BCD字段类型(TBCDField) 现在很多数据库中都有了Decimal和Numeric数据类型,它们可以精确保存浮点类型,可以将Decimal和Numeric类型映射为BCD字段类型。 在BDE的TDatabase控件,有一个EnableBCD选项: 在ADO的TADOQuery也有EnableBCD选项。
EnableBCD选项的用来说明如何处理数值类型(Decimal和Numeric)字段: 1) EnableBCD为TRUE时,数值类型字段映射为TBCDField类。 2) EnableBCD为FALSE时,数值类型字段映射为TFloatField类。 TBCDField定义在DB.pas文件中:
因为TBCDField使用Currency类型来保存数据(注意:不是用TBCD来保存的),而Currency固定有且只有4位小数,所以精度超过4位请使用TFloatField(即EnableBCD位FALSE)。 * 精度太高如果使用TFloatField有时发现录入的小数保存后会发生变化,这时还可以选择使用TFMTBCDField来保存数据; UniDAC可参考下图设置: 修改EnableFMTBCD属性后需将UniQuery打开刷新一次(双击Active属性2次),最后将字段删除再重新拉进来, 对应的字段就会变成TFMTBCDField类型。
四. 参考文献
http://www.cnblogs.com/ywangzi/archive/2012/11/14/2769823.html |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论