c# - 在 C# 中比较 double 值

标签 c# .net double

我有一个名为 xdouble 变量。 在代码中,x 被赋值为 0.1,我在比较 x0.1< 的“if”语句中检查它

if (x==0.1)
{
----
}

很遗憾没有进入if语句

  1. 我应该使用 Double 还是 double

  2. 这背后的原因是什么?您能为此提出解决方案吗?

最佳答案

由于计算机存储浮点值的方式,这是一个标准问题。在这里搜索“ 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/

相关文章:

c# - 重定向所有网络流量

.Net PetaPoco 默认查询参数

java - Math.pow(2,63) - 1 == Math.pow(2,63) - 512 为真

java - Arraylist - 字符串/ double

c# - 无法从 Microsoft.AspNet.Identity 检索 UserId

c# - 如何修复 "a connection attempt failed because the connected party did not properly respond after a period of time ..."错误?

c# - 中央标准时间休息一小时

c# - 使用 LINQ 在一行代码中将 string[] 转换为 int[]

c# - 强制 WebClient 使用 SSL

java - 浮点运算未按预期工作