数学上,可以证明0.9循环等于1。然而,这个问题并不涉及无穷大、收敛或其背后的数学原理。
在C#中,可以用以下方式表示上述假设:
var oneOverNine = 1d / 9d;
var resultTimesNine = oneOverNine * 9d;
使用上面的代码,
(resultTimesNine == 1d)
的评估结果为true。当使用小数时,评估结果为false,但我的问题并不是关于double和decimal的差异精度。
由于没有类型具有无限精度,因此double如何保持这样的相等性,而decimal却没有呢?关于上述代码中的
oneOverNine
变量在内存中的存储方式,文字之间发生了什么事情?