I've a double
变量称为x
。
在代码中,x
被赋值为0.1
我在“if”语句中检查它比较x
and 0.1
if (x==0.1)
{
----
}
不幸的是它没有进入if
陈述
我应该使用Double
or double
?
这背后的原因是什么?您能为此建议一个解决方案吗?
由于计算机如何存储浮点值,这是一个标准问题。在这里搜索“浮点问题”,您会找到大量信息。
简而言之 – float/double 无法存储0.1
恰恰。总是会差一点。
您可以尝试使用decimal
以十进制形式存储数字的类型。因此0.1
将能够精确地表示。
您想知道原因:
float/double 存储为二进制分数,而不是十进制分数。为了显示:
12.34
用十进制表示法(我们使用的)表示
1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2
计算机以相同的方式存储浮点数,只不过它使用基数2
: 10.01
means
1 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2
现在,您可能知道有些数字无法用我们的十进制表示法完全表示。例如,1/3
用十进制表示是0.3333333…
。二进制表示法中也会发生同样的情况,只不过无法精确表示的数字不同。其中有数1/10
。用二进制表示法是0.000110011001100…
.
由于二进制记数法无法精确存储,因此采用四舍五入的方式存储。因此你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)