-1

在 C# 中将 Decimal 转换为 Double 时遇到问题。而不是 0.3 我得到 0.2999999999999

当我稍微调试一下时,我发现转换不是问题。

查看打印屏幕和我的监视列表? http://i.imgur.com/rTUDfxo.png

有人有想法吗?

编辑:回答:这是 Visual Studio 2010 的一些奇怪行为。重新启动后一切都很好。

4

2 回答 2

2

0.3有一个无限的表示,当存储二进制时:(0.) 00111111 11010011 00110011 00110011 00110011 00110011 00110011 00110011 .....不管你用 32,64 或 128 位存储它,它都会在某个时候被切断。

将其转换回双精度时,您将失去准确性。这就是为什么你得到 0.2999999999 ...

这不是错误,不可能存储无限精度。

于 2013-05-10T09:00:06.573 回答
1

这种行为对于 double 来说很常见,因为它是一个浮点二进制类型。这两种类型在内存中保存的值完全不同,例如:

在浮点数中,计算机会保存一个这样的数字

10001.10010110011

但是在十进制中,它是这样存储的

12345.65789

这可能会导致数字的微小差异,例如:

在浮动:

0.1 = 0.09999

十进制

0.l = 0.1
于 2013-05-10T09:04:15.450 回答