我有一个叫做x
的double
变量.
if (x==0.1)
{
----
}
不幸的是,它没有进入if
语句
我应该用
Double
还是double
?这背后的原因是什么?你能提出一个解决方案吗?
我有一个叫做x
的double
变量.
if (x==0.1)
{
----
}
不幸的是,它没有进入if
语句
我应该用Double
还是double
?
这背后的原因是什么?你能提出一个解决方案吗?
由于计算机存储浮点值的方式,这是一个标准问题.在这里搜索"浮点问题",你会发现大量的信息.
简而言之,浮点数/双精度数不能精确地存储0.1
.它总是会有点不对劲.
您可以try 使用decimal
类型,它以十进制表示法存储数字.因此0.1
将被精确地表示.
你想知道原因:
Float/double存储为二进制分数,而不是十进制分数.为了说明:
12.34
在十进制记数法中(我们使用的)表示
1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2
计算机以同样的方式存储浮点数,只是它使用2
:10.01
的基数
1 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2
现在,你可能知道有些数字不能用十进制表示法完全表示.例如,十进制表示法中的1/3
是0.3333333…
.同样的事情在二进制记数法中也会发生,只是不能精确表示的数字是不同的.其中有1/10
号.用二进制表示法,即0.000110011001100…
.
由于二进制记数法不能精确地存储它,因此它以四舍五入的方式存储.这就是你的问题所在.