2013-01-18 84 views
3

我對特定的轉換有一個有趣的問題。 當我嘗試將字符串"0,3""0.3"(根據UICulture)轉換爲Double值時,結果爲0,29999999。我還沒有找到解決方案,以獲得結果0,3將字符串轉換爲雙C#

有什麼辦法可以在轉換後得到相同的值?

+8

這已被問了很多很多很多次。由於十進制值存儲在二進制計算機中,0.3'不能完全表示爲雙精度值。 – mellamokb

+0

查看Marc的回答。值得注意的是,它被稱爲浮點表示而不是表示。 http://en.wikipedia.org/wiki/Floating_point – kenny

回答

14

double不能代表每個值。它保證代表整數,但就是這樣。如果你需要的東西更像是數字的「人」的逼近,使用decimal

decimal val = decimal.Parse("0.3"); 

注:decimal並不表示每個值 - 但它確實近似更趨於怎麼樣的人的方式預計數字工作。特別是,double幾乎沒有用於貨幣等東西。

+1

Jon Skeet [here](http://stackoverflow.com/a/618596/18192)提供了一些更詳細的信息。點擊鏈接的文章進行深入的解釋。簡單的答案是,「十進制」以10爲基數,與0.3匹配。 'double'在基數2中,不是。 – Brian