Visual Studio 2010 C#Double
我在C#中将Decimal转换为Double时遇到了问题。 而不是0.3我得到0.2999999999999Visual Studio 2010 C#Double
当我调试一点点时,我已经看到转换不是问题。
查看打印屏幕和我的观察列表? http://i.imgur.com/rTUDfxo.png
有没有想法?
编辑: 答案:这是Visual Studio 2010的一些奇怪的行为。 重新启动后,一切都很好。
0.3
当存储二进制文件时有一个无限表示法:(0.) 00111111 11010011 00110011 00110011 00110011 00110011 00110011 00110011 .....
无论是用32,64还是128位存储它,它都会在某个时刻切断。
当将其转换为双精度时,将失去精度。这就是为什么你得到0.2999999999 ...
这不是一个错误,它是简单的不可能存储无限精度。
这是Visual Studio 2010的一些奇怪的行为。重新启动后,一切都很好。 – 2013-05-10 09:00:43
请注意此标准:http://en.wikipedia.org/wiki/IEEE_floating_point IEEE-754 – 2013-05-10 09:12:28
该行为常见于双倍行为,因为它是floating binary type。 这两种类型保存的值在存储器中完全不同的,例如:
在浮子,所述计算机保存这样
10001.10010110011
若干然而,在小数时,它存储这样
12345.65789
这可能会导致数字差别很小,例如:
在浮动:
0.1 = 0.09999
在十进制
0.l = 0.1
浮点值 – 2013-05-10 08:40:13
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg。 html – 2013-05-10 08:42:02
事实上,这个问题无法回答。 0.2999999999999与0.3的Double值一样有效。没有语境,没有人能告诉你为什么你观察的这些价值观是“错误的”。 – 2013-05-10 08:42:06