我正在添加两个包含双值的数组
let arrayA = [1.1,2.3]
let arrayB = [4.2,5.5,6.8]
let c = arrayA + arrayB
print("\(c)");
打印功能正在打印以下结果:
[1.1000000000000001, 2.2999999999999998, 4.2000000000000002, 5.5, 6.7999999999999998]
如何在添加数组后获得精确的double值?
答案 0 :(得分:4)
你没有。这是Double
(和Float
)的工作方式。
作为解决方法,您可以在打印时对其进行舍入
for num in c {
print(String(format: "%.1f", num))
}
1.1
2.3
4.2
5.5
6.8
答案 1 :(得分:1)
您需要更改如下:
定义数组的类型,因为你现在还没有定义。
let arrayA : [CGFloat] = [1.1,2.3]
let arrayB : [CGFloat] = [4.2,5.5,6.8]
答案 2 :(得分:1)
您所看到的内容(1.1
- > 1.1000000000000001
)的原因在于浮点数的性质。它是由舍入误差引起的,因为实数的无限性质无法在其有限内存(浮点)表示中呈现。
在您的情况下,这可能不是一个大问题,因为您可以更改其他答案中所述的打印格式,但可能导致难以跟踪错误,尤其是在比较浮点数时。例如,以下代码:
let result = 1.1 * 3.0
if result == 3.3 {
print("I thought so!")
} else {
print("This might be unexpected")
}
打印:
This might be unexpected
有关详情,建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic: