【发布时间】:2017-04-18 23:03:23
【问题描述】:
let dic : [Double : Double] = [1.1 : 2.3, 2.3 : 1.1, 1.2 : 2.3]
print(dic)// [2.2999999999999998: 1.1000000000000001, 1.2: 2.2999999999999998, 1.1000000000000001: 2.2999999999999998]
let double : Double = 2.3
let anotherdouble : Double = 1.1
print(double) // 2.3
print(anotherdouble) // 1.1
我不明白为什么编译器会以不同的方式打印字典中的值? 我正在使用 Swift 3、Xcode 8。这是一个错误还是某种奇怪的优化方式?
编辑
更奇怪的是:
有些值超过,有些低于,有些保持原样! 1.1 小于 1.1000000000000001 而 2.3 大于 2.2999999999999998,1.2 只是 1.2
【问题讨论】:
-
看起来并不完全像一个错误,但它有点不一致
-
FWIW,1.1的精确值和2.3是1.100000000000000088817841970012523233890533447265625和2.29999999999999982236431605997495353221893310546875,解释该偏差的方向和大小跨度>
-
@harold 你是什么意思他们的确切价值是那个。我不跟。您是从哪里/如何得出这些数字的?
-
这是浮点数的本质。了解更多详情in this answer。
-
另外,你可能不应该使用双精度字典。
标签: swift