作者:野蛮生长 | 来源:互联网 | 2023-02-04 11:26
我试图比较两个相同的纬度,它是类型的Double
,当我打印结果时,它被评估为false
.
print("spot latitude: " + String(spot.location.latitude))
print("first object: " + String(firstSpot.location.latitude))
print(spot.location.latitude == firstSpot.location.latitude)
输出:
spot latitude: 32.8842183049047
first object: 32.8842183049047
false
任何人都知道发生了什么?
1> Andrea..:
比较双打中的平等很少给你预期的答案,这是由于如何存储双打.您可以创建自定义运算符,请记住您应该使用一些准确性.
要了解更多信息,您可以查看此答案,即使它说的是ObjC,原则也是超级有效的.
由于我在线检查有同样的问题,我在apple dev论坛上找到了这个答案.
这个功能应该可以做到,你可以轻松创建一个自定义运算符:
func doubleEqual(_ a: Double, _ b: Double) -> Bool {
return fabs(a - b)
我试图从swift 2.x转换为3.x似乎宏DBL_EPSILON
不再可用了.
2> Gerriet..:
使用==比较double或float值将不会在大多数编程语言中给出预期结果,这意味着您认为应该相等的数字实际上略有不同.相反,如果差值低于某个阈值,则计算绝对差值并将数字处理为相等.有关更多说明,请参阅使用epsilon将double比较为零.