将字符串转换为双精度浮点数 C#

3
我遇到了一个有趣的问题,与特定的转换有关。当我尝试将字符串"0,3""0.3"根据UICulture转换为Double值时,结果是0,29999999。我还没有找到解决方案,以便获得0,3的结果。

有没有办法在转换后获得相同的值?


8
这个问题已经被问了很多次。由于十进制值在二进制计算机中的存储方式, 0.3 无法以双精度浮点数精确地表示。 - mellamokb
参见Marc的回答。值得注意的是,它被称为浮点数表示而不是演示。http://en.wikipedia.org/wiki/Floating_point - kenny
1个回答

14

double 无法表示 每一个值。它保证可以表示整数,但只有这些。如果你需要更接近“人类”对数字的近似值,请使用 decimal

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

注意:decimal也不能表示所有的值,但它所做的近似更像人们期望数字工作的方式。特别是,double对于货币等方面几乎没有用处。

1
Jon Skeet 在这里 提供了更详细的解释。点击链接文章以获取深入解释。简而言之,答案是 decimal 是基于十进制,与 0.3 相匹配。而 double 则是基于二进制,不匹配。 - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接