【发布时间】:2011-07-06 07:27:01
【问题描述】:
我的完整性检查失败了,因为双变量不包含预期的结果,这真的很奇怪。
double a = 1117.54 + 8561.64 + 13197.37;
double b = 22876.55;
Console.WriteLine("{0} == {1}: {2}", a, b, a == b);
给我们这个输出:
22876.55 == 22876.55: False
进一步检查表明,变量 a 实际上包含值 22876.550000000003。
这在 vb.net 中也可以重现。 我神智正常吗?怎么回事?
【问题讨论】:
-
浮点类型不能总是表示精确十进制值。根据您的观点,它是“已知错误”或“设计使然”。尝试改用
decimal类型。 -
你很清醒,但你的期望不合适。阅读csharpindepth.com/Articles/General/FloatingPoint.aspx
-
@Cody Okay decimal 可能是一种解决方法。但是,在所有其他已编写的应用程序的所有其他代码中,我如何才能减轻任何其他可能的此类不一致?
-
我怀疑相关问题现在都出现了,因为添加了标签 dan04:“floating-accuracy”。这是一个众所周知的现象,如果你不知道的话,它肯定是无数(嘿!)错误的来源。
标签: .net variables floating-point floating-accuracy