我有一个相当简单的表达式,我想评估它是 ZoomLevel = ZoomLevel - 0.1 其中 ZoomLevel 被声明为双精度。
我已经多次调用该例程:
- 1.5 - 0.1 = 1.4
- 1.4 - 0.1 = 1.3
- 1.3 - 0.1 = 1.2
然后是时候执行 ZoomLevel 等于 1.2 的相同语句了:
然后我跳过声明:
为什么这个语句的计算结果是 1.09 而不是 1.1?
(我想这与双重实现中缺乏精度有关。)
编辑:这是我在执行该语句之前和之后打印 ZoomLevel 的内容时得到的。
?string.Format("{0:N20}", ZoomLevel);
"1,20000000000000000000"
?string.Format("{0:N20}", ZoomLevel);
"1,09000000000000000000"