2013-01-18 85 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