2013-05-30 84 views
2

我在Windows 7 64上使用MSAccess 2010.访问比较浮点数“不正确”

我正在比较查询中的两个表。我正在加入一个复合PK,并选择表A列A <>表B列A,其中两列的列A是双精度。

对于120行它的工作原理。对于28行,表A列中的0.088的值A <> 0.088在表B列A中。

没有任何文本函数被使用任何地方。

当我向查询a添加一列时:[TableA]![ColumnA] - [TableB]![ColumnA]我返回值如-1.38777878078145E-17。

当我导出查询到Excel和做数学题的结果= 0

怎么可能是0.088 - 0.088 <> 0? 0.088 double <> 0.088 double是怎么可能的?

回答

1

这是一个非常普遍的问题,涉及任何计算环境(不仅仅是Access)中浮点数的性质。这似乎是一个悖论,但事实是值大约非常精确地代表了一个巨大的数字范围(最多15位有效数字,参考号:here),但该表示几乎不是精确。这就是为什么:浮点数的

  • 确切比较(例如x=y)有时会失败,因此

  • 你不应该依赖于两个Double之间JOIN领域。

有关浮点数的更多信息可用here。维基百科也解决了这个问题here

如果你有需要确切比较,那么你可能要考虑其更改为CurrencyDecimal小数位的字段。

+0

这是正确的。我将表格结构更改为小数7,7,并且显示了Access在后台隐藏的值。正在显示0.088,但实际数量为0.0879999。 –