执行了ADO相关的语句之后浮点数精度变化?
给一个double型变量赋值为一个常量,比如说8.07,这时用FormatFloat查看,他是有误差的,类似于8.07000000000000028这样。
但是,在执行了ADO相关的语句之后,比如说CreateOleObject( 'ADODB.connection ')之后,就没有这个误差了。再给另一个变量同样赋值8.07,用FormatFloat查看,就是8.07,没有后面的尾数。
因为我们现在有另一个没有用到ADO的程序,这样就造成两边的结果不一致。怎样避免这个问题?最好是两边都是有误差的情况,因为另一个程序不能改。
[解决办法]
ADODataSet/ADOQuery有个属性EnabledBCD
EnabledBCD=True时,数据集中的浮点数字段是TBCDField,数据类型是Currency
EnabledBCD=False时,数据集中的浮点数字段是TFloatField,数据类型是Double
查看ObjectPascal语法手册,可以看到Currency的精度比Double要高。
所以你可以把浮点数变量设为Currency类型试试,但是Currency对小数点后的位数有限制。
另外你还可以试一下Extended类型。