如何比较A和B(CGFloats
)是否等于小数点后的5位数?这是必要的,因为this issue。
答案 0 :(得分:12)
与使用任何其他语言比较浮点数相同。
取数字差异的绝对值,并将其与可接受的差值进行比较。
let delta: CGFloat = 0.00001
let a: CGFloat = 3.141592
let b: CGFloat = 3.141593
if abs(a-b) < delta {
println("close enough for government work")
}
答案 1 :(得分:0)
根据@nhgrif给出的答案,我在存在一些Double比较错误的现有应用程序中创建了易于使用的东西。
infix operator ~<=
infix operator ~==
infix operator ~>=
extension Double {
static func ~<= (lhs: Double, rhs: Double) -> Bool {
(lhs < rhs) || (lhs ~== rhs)
}
static func ~>= (lhs: Double, rhs: Double) -> Bool {
(lhs > rhs) || (lhs ~== rhs)
}
static func ~== (lhs: Double, rhs: Double) -> Bool {
abs(lhs - rhs) < 0.0000000001
}
}
然后您可以像使用其他任何比较器一样使用它
(1000.0 / 100.0) ~== 10.0 // true