我正在使用带有 db2 9.7 Express-C 的 delphi 2010,并且我有一个数据库,它有几个十进制类型的字段来处理货币值。现在我看到使用它存在一些问题,例如 9.20 值在我的前端显示值 9.19999980926514。我需要将数据库中的所有字段更改为 DECFLOAT 或者 tfield 中是否有函数、属性或其他替代方法来解决它?
谢谢。戴维斯
直接使用货币小数几乎总是一个问题。由于从数据库到您的前端应用程序的不同转换,可能会失去或获得(这也适用于大多数金融系统 - 请参阅银行家四舍五入)。
我建议您在进行操作/显示/等之前使用RoundTo功能。一篇关于舍入的非常好的文章http://docwiki.embarcadero.com/RADStudio/XE2/en/Floating-Point_Rounding_Issues
另一个建议是使用Currency类型。这是一个关于 SO 的问题,对这种类型有很好的解释如何在 Delphi 中比较货币值时避免舍入问题?