了解 C# 中的双精度比较
问题:
在 C# 中直接比较 double
变量可能会产生意想不到的结果。例如,即使 if (x == 0.1)
被分配值 false
,x
也可能计算为 0.1
。
根本原因:
问题源于浮点数(如 float
和 double
)在计算机内存中的表示方式。它们使用二进制小数表示,与我们习惯的十进制小数表示不同。 这意味着许多十进制值(例如 0.1)无法用二进制精确表示。 由此产生的近似值会引入细微的舍入误差。
解决方案:
当精度至关重要时,最有效的解决方案是使用 decimal
数据类型。 decimal
采用十进制小数表示,能够准确存储 0.1 等值。
更多详情:
二进制分数,与十进制类似,使用 2 的幂而不是 10 的幂。正如 1/3 (0.3333...) 无法用十进制精确表示一样,1/10 (0.1) 也缺乏精确的二进制表示。 这种固有的限制会导致舍入误差,从而导致比较差异。 计算机存储了 0.1 的近似值,但该近似值并不完全等于比较中使用的文字 0.1。
以上是为什么在 C# 中比较双精度值有时会返回 False?的详细内容。更多信息请关注PHP中文网其他相关文章!