2017-06-19 90 views
0

嗨,我的夥伴訪問用戶。 我使用Access通過鏈接兩張Excel工作表進行對帳。該數字是兩位小數。 Linked Table viewMicrosoft Access自動增加小數點

然而,當我試圖把兩個數字都2位小數之間運行減法,它返回的結果是這樣的: enter image description here

感激,如果任何人都知道這是怎麼發生的,我需要採取哪些步驟要解決這個問題?

由於 田

+0

當你說「十進制」數字時,列的精確數據類型是什麼?對於鏈接的Excel工作表,該類型可能是Double,一個64位浮點數。您遇到此問題可能是由於浮點數的固有限制,並不是唯一的Excel或Access。 –

+0

也作爲編寫更好的SO問題的提示:如果顯示某些計算的結果,則始終顯示用於計算的數字,而不僅僅是結果。此外,而不是一個圖像,花時間編譯一個在問題中可見的實際樣本值的表格,並可以複製和粘貼。 –

回答

1

對於鏈接的Excel工作表,列類型可能是雙,一個64位浮點數。您遇到此問題可能是由於浮點數的固有限制,並不是唯一的Excel或Access。

這個堆棧溢出問題本質問同樣的事情:Why does this subtraction not equal zero?

Excel中也不例外,只是默認的格式可能不表現出必要的精度來揭示行爲。選擇科學格式或增加顯示的小數位數將顯示相同的行爲。

考慮以下幾點:

  1. 對於貨幣金額,使用CCur()函數值轉換爲貨幣。貨幣是一個固定的十進制值,但請注意,它只在小數點右邊有4位數字。 (已更新,反映Gustav的建議)
  2. 在執行數學運算之前,使用CDec()函數將值轉換爲定點十進制類型。沒有原生的VBA Decimal類型,因此它們是包含Decimal值的變體。但是在轉換回浮點時,仍然可能會遇到額外的數字。
  3. 使用Round()函數對結果進行舍入,但不能保證消除浮點限制。
  4. 選擇明確的格式來顯示數字。
+0

不錯的提示。我已經將源excel列類型更新爲貨幣,問題現在已經消失。 –

+0

,感謝您對這個問題本身進行評論。真的很感謝你的時間。 –

1

請勿直接使用鏈接的Excel數據。

創建簡單選擇查詢您可以在其中轉換和修剪您的數據。像:

Select SomeField, Description, CCur([TotalAmount]) As Total 
From YourLinkedExcelTable 

當大量打交道時,總是使用貨幣的數據類型。

現在,計算您的區別使用查詢。

+0

+1由於貨幣缺乏足夠的小數精度(只有4位數)來表示任何一般金額,因此我假設您的「金額」是指「貨幣金額」。 –

+0

是的。謝謝。 – Gustav