2014-03-05 42 views
0

我已經在單元格A1和B1中放置了兩個日期時間值。日期時間正好是41703.0416666667。一個是從SQL數據庫輸出另一個手動寫入。Excel如果相等和匹配不會返回相同的東西

= if(A1 = B1,1,0)的結果是1. = MATCH(B1,A1,0)的結果是#N/A。

有沒有人有任何理論,爲什麼這可能會發生?

+0

你確定兩個時間值是完全一樣的嗎?如果我將'41703.0416666667'複製到電子表格的兩個單元格中,並按照您的要求進行匹配,則確實得到1. – nutsch

+0

您好,感謝您的回覆。假設我的解釋不夠充分,當一步一步完成這些步驟的時候,它確實有效。也許我應該更詳細地說,單元格A1中的內容來自mySQL數據庫的輸出。 – gstanley

回答

1

可能是將小數轉換爲二進制的問題。請參閱相關的答案:

Simple HLOOKUP Failing with Excel 2010

這似乎是二進制存儲浮點數的限制 - 如下所述:http://support.microsoft.com/kb/214118

許多算術運算的組合對浮點數 Microsoft Excel和Microsoft Works可能產生的結果顯示 由於數量太小而不正確。例如,等式 = 1 *(5-0.4-0.1)可以被評估以數量(-2.78E-17),或-0.0000000000000000278而不是0

此問題不是唯一擅長要麼而是結果:

IEEE 754指定數字被以二進制格式存儲,以減少 存儲需求,並允許內置二進制算術 說明書上提供的所有微處理器來處理 數據以相對快速的方式。但是,一些簡單的非重複十進制數字即 將轉換爲重複的 二進制數字,這些二進制數字無法以完美的準確度進行存儲。

+0

同意Stepan,浮點問題的另一個來源:http://support.microsoft.com/kb/78113 – nutsch

+0

一致認爲這是更可能的問題,因爲匹配正確發生在41703.375但是有沒有工作這個? – gstanley

+0

@gstanley爲了比較相等或者做LOOKUP類型的函數,我認爲你可以將它們轉換爲長整數(所以沒有小數)。如果您有其他使用日期/時間的計劃,並且您絕對需要這種準確度,那麼有辦法將風險不準確度降至最低,但他們不會消除準確性問題:http://en.wikipedia.org/wiki/Floating_point#Minimizing_the_effect_of_accuracy_problems - 也請參閱:http://stackoverflow.com/questions/14859875/c-how-to-avoid-floating-point-arithmetic-error – Stepan1010

0

問題在於浮點計算(請參閱http://support.microsoft.com/kb/78113),一種可能的解決方法是使用round()函數。在你的情況下,舍入到10或12位小數可能足以解決這個問題。

+0

你好,謝謝你的信息。我已經嘗試使用round()到10位小數。它尚未解決問題。當我複製粘貼到單元格的單元格的值都會導致完全相同的數字。 – gstanley

相關問題