2013-05-30 123 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。 –