我有一个程序运行一段时间,一切正常,直到这个奇怪的事情发生。当我将一个数字字符串转换为Single时,我只是无法获得我想要的值。例如:
Convert.ToSingle("11006.954")
返回值11006.9541
Convert.ToSingle("20678.228")
返回值20678.2285
我知道我可以使用Convert.ToDouble修复它,但修改现有系统需要数天时间。我使用的是vs2003 .net 1.1。
答案 0 :(得分:10)
您好像希望Single
能够完全表示您给出的数字。它不能。 11006.9541是距离11006.954最近的Single
值。 (事实上,最接近的Single
的精确值是11006.9541015625,但我怀疑你在调试器中看到了11006.9541。)
如果您想要准确表示最初表示为小数的数字,则应使用System.Decimal
。
有关详细信息,请参阅.NET中的binary floating point和decimal floating point上的文章。