在数学上,可以证明 0.9 循环等于 1。然而,这个问题与无穷大、收敛或这背后的数学无关。
上面的假设可以用 C# 中的双精度表示,如下所示。
var oneOverNine = 1d / 9d;
var resultTimesNine = oneOverNine * 9d;
使用上面的代码,(resultTimesNine == 1d)
计算结果为真。
当使用小数代替时,评估产生错误,但是,我的问题不是关于双精度和小数的不同精度。
既然没有类型具有无限精度,那么 double 如何以及为什么能在十进制没有的情况下保持这种相等性?oneOverNine
关于变量存储在内存中的方式,上面代码的“字面意思”发生了什么?