我有一个名为 x
的 double
变量。
在代码中,x
被赋值为 0.1
,我在比较 x
和 0.1< 的“if”语句中检查它
if (x==0.1)
{
----
}
很遗憾没有进入if
语句
我应该使用
Double
还是double
?这背后的原因是什么?您能为此提出解决方案吗?
最佳答案
由于计算机存储浮点值的方式,这是一个标准问题。在这里搜索“ float 问题”,您会找到大量信息。
简而言之——float/double 不能精确地存储 0.1
。总会有点偏差。
您可以尝试使用 decimal
类型,它以十进制表示法存储数字。因此 0.1
将被精确表示。
您想知道原因:
float / double 存储为二进制小数,而不是小数。举例说明:
12.34
十进制表示法(我们使用的)表示
1 * 101 + 2 * 100 + 3 * 10-1 + 4 * 10-2
计算机以相同的方式存储 float ,只是它使用基数 2
:10.01
表示
1 * 21 + 0 * 20 + 0 * 2-1 + 1 * 2-2
现在,您可能知道有些数字无法用我们的十进制表示法完全表示。例如,1/3
十进制表示为0.3333333…
。同样的事情发生在二进制表示法中,只是不能精确表示的数字不同。其中有数字1/10
。在二进制表示法中是 0.000110011001100...
。
由于二进制表示法不能精确存储,所以采用四舍五入的方式存储。因此你的问题。
关于c# - 在 C# 中比较 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1398753/