2011-01-20 75 views

回答

9

如果你想要它完全一样,你应该使用i.ToString("r")(“r”用于往返)。你可以阅读有关不同的numeric formats on MSDN

+0

我再次添加数字后忽略.5 !! – kartal

+0

这完全是另一个问题:)通过回答Jon的回答下面... – porges

5

您正遇到Double精度限制。从the docs

记住,浮点数只能近似一个十进制数,而一个浮点数的精度确定数目如何准确地近似一个十进制数。默认情况下,Double值包含15位精度的十进制数字,但内部最多保留17位数字。

如果你想要更高的精度 - 特别是保持十进制表示 - 你应该看看使用decimal类型来代替。

+0

失败再次如果我们添加33845159852507.5 5次结果将是169225799262538而不是169225799262537.5我认为这是大问题 – kartal

+0

@salamonti:这个答案解释了为什么你看到结果你看到了。 *所有*编程语言都有这个“问题” - 这是对现实的一个不幸的限制,你只能在64位数值内有很高的精度。 – Timwi

+0

@salamonti:基本上Timwi说的就是这个。有关更多信息,请参阅http://csharpindepth.com/Articles/General/FloatingPoint.aspx。 –