2012-06-17 74 views
0

我們在客戶網站上存在問題,我們正在導入包含兩個日期字段(開始日期和結束日期/時間,精確度爲秒)的CSV文件。導入代碼將這兩個日期之間的差異計算爲TimeSpan,然後我們將TotalSeconds保存到數據庫(在real字段中)。日期差異會返回秒數的虛假分數

完美適用於我們的開發環境 - 但由於某種原因,在客戶網站上,時差會導致計算中出現一些小數誤差,例如123秒的時差通常會在數據庫中顯示爲123.0001秒,或122.9999秒。我們不能在這裏重現問題。

我記得很多年前,Pentium處理器存在一些問題,他們正在製造奇怪的浮點計算錯誤(例如它們被命名爲5.0001-ium處理器),但我不記得細節。客戶網站上可能有類似的問題,因此日期/時間計算會被特定類型的處理器搞亂?你能想出這種奇怪行爲的其他可能原因嗎?

代碼非常簡單。我編輯了一些無關的東西,但它是這樣的:

DateTime startDate, endDate; 
// set startdate and enddate by parsing from CSV file 
var timeDiff = endDate.Subtract(startDate); 
// and we save to the database using timeDiff.TotalSeconds 
+6

如果你只想要整數,你爲什麼要在'real'字段中保存值?沒有看到任何代碼,很難說出發生了什麼。 –

+0

計算是在C#或SQL服務器中完成的嗎? –

+0

@JonSkeet - 添加了代碼段FWIW。這是一個「真正的」領域,因爲原來的程序員決定這麼做。我不會去證明這個決定是正確的。我只能說這就是我需要處理的事情,而且我沒有選擇將其更改爲「int」的選項。 –

回答

0

在將數字放到數據庫中之前將數字舍入爲整數。

+0

事實上,這是一個非常合理的解決方案,儘管通過質量保證和發佈程序獲取客戶需要一段時間。我希望能夠在客戶網站上找到我們可以爲即時解決方案做些調整的事情。 –

+0

現在,在與團隊的其他成員覈對之後,我們無法在保存之前舍入價值,因爲此列的其他用法我們確實需要小數值。只有在CSV導入的特定情況下,我們纔會預計整數值。是的,我們可以在CSV導入代碼中操作TimeSpan對象,但這有點不方便,並沒有真正解決核心問題。如果有更好的解決方案成爲問題的核心,我寧願不必依賴這一點。 –