2009-08-17 105 views
2

我使用Convert.ChangeType()從對象轉換(這是我從數據庫中獲取),以一個泛型類型T的代碼如下所示:C#錯誤轉換

T element = (T)Convert.ChangeType(obj, typeof(T)); 
return element; 

這個偉大工程的大部分時間,但是我發現,如果我試圖投簡單的東西如下面的SQL查詢

select 3.2 

上面的代碼(T爲雙)的回報率不會回到3.2,但3.2000000000000002 。我不明白爲什麼會發生這種情況,或者如何解決這個問題。請幫忙!

回答

7

你看到的是浮點數在內存中表現的方式。有相當多的信息可以確切地說明這是爲什麼,但this paper是一個很好的信息。這種現象就是爲什麼你最終會出現看起來異常的行爲。永遠不應該將未被格式化的用戶顯示爲doublesingle,並且應該避免像鼠疫這樣的平等比較。

如果您需要精確到更高精度水平的數字(即表示貨幣值),請使用decimal

2

這不是轉換問題。內部雙重類型表示實數的2的無限分數,這就是爲什麼你會得到這樣的結果。根據你的目的使用:

  • 用十進制
  • 或者使用精確的格式化{0:F2}
  • 使用Math.Flor/Math.Ceil