2011-03-29 106 views
2

我有一段程序运行一段时间,一切正常,直到发生这种奇怪的事情。当我将数字字符串转换为Single时,我无法获得我想要的值。例如:c#将字符串转换为单个

Convert.ToSingle("11006.954")返回值11006.9541 Convert.ToSingle("20678.228")返回值20678.2285

我知道我可以使用Convert.ToDouble修复它,但它会需要数天才能修改现有的系统。我正在使用vs2003 .net 1.1。

+2

[这是为什么](http://floating-point-gui.de/) – Blorgbeard 2011-03-29 07:43:45

回答

10

你似乎期待Single能够代表确切你给的数字。它不能。 11006.9541是距离11006.954最近的Single。 (事实上​​,最接近Single确切值11006.9541015625,但我怀疑你在调试器中看到11006.9541)

如果您希望的数字精确表示最初表现为小数,你应该使用System.Decimal

请参阅我的文章binary floating pointdecimal floating point在.NET中的进一步信息。

+0

谢谢。这真的有帮助。看起来像我在做一个新手的错误:第 – nonetaku 2011-03-29 09:13:51