我遇到了一個令我困惑的問題。。網絡服務器之間的網絡舍入/小數點差異
這裏有一點背景知識:我們是在升級asp.net 2.0 Web應用程序到.NET 4到64位服務器的過程。我們爲新老服務器部署了測試應用程序,以確保事情在我們上線之前按預期工作;它們都指向另一臺服務器上的相同數據庫。
這裏的問題:
double totalGross;
double totalNet = 9999999.00;
float taxRate = 15.00f;
totalGross = totalNet * (1 + (taxRate/100));
在舊服務器上,totalGross的的ToString()產生:11499998.85
在新服務器上,totalGross的的ToString()產生: 11499998.6115814
目前不知道爲什麼這可能是?後者的值甚至不代表第一個數字是非舍入的?
順便說一句 - 我沒有找到糾正/改進代碼的方法......只是在可能的原因之後才發生這種情況!
更新
我創建了一個控制檯應用程序,並建立了它在x86和x64以及在服務器上運行兩個版本,並將其輸出的兩個不同的數字。所以在使用double時,它確實會在32位和64位之間出現某種精度損失。這令我感到驚訝,因爲'精確度的損失是0.2,這對我來說似乎並不精確,而且有很大的區別?!正如有人提出它可能會更好使用十進制類型(在我的防守不是我寫這樣的代碼:P)
那是很奇怪的文檔浮點平臺問題的筆記,因爲我只是跑兩個64位和32位的機器,代碼都得到了11499998.85。 – Jethro
你確定沒有什麼會突變這些值嗎? –
假設說,如果您要使用更合適的財務計算類型來運行代碼,那麼您會觀察到什麼結果? –