Swift:如何比较CGFloat小数点后的前n位数?

时间:2015-05-06 22:59:16

标签: swift floating-point

如何比较A和B(CGFloats)是否等于小数点后的5位数?这是必要的,因为this issue

2 个答案:

答案 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