我們在客戶網站上存在問題,我們正在導入包含兩個日期字段(開始日期和結束日期/時間,精確度爲秒)的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
如果你只想要整數,你爲什麼要在'real'字段中保存值?沒有看到任何代碼,很難說出發生了什麼。 –
計算是在C#或SQL服務器中完成的嗎? –
@JonSkeet - 添加了代碼段FWIW。這是一個「真正的」領域,因爲原來的程序員決定這麼做。我不會去證明這個決定是正確的。我只能說這就是我需要處理的事情,而且我沒有選擇將其更改爲「int」的選項。 –