簡體   English   中英

比較 swift 中的雙值

[英]compare double values in swift

我想比較 swift 中的兩個雙精度值

var first_value = 10.20
var second_value = 20.30
if first_value > second_value
   println("some statement")

我們如何比較這種類型的東西..

您在 Swift 中學到的第一件事是 {} 對於所有 if、if else 和 else 語句都是強制性的。

因此,您的代碼應如下所示:

 var first_value = 10.20
 var second_value = 20.30

 if first_value > second_value {
     print("first_value is greater than second_value")
 }
 else {
     print("first_value is not greater than second_value ")
 }

您不應該使用“>”、“<”和“=”符號來比較 float 或 double。 特別是對於接近值的比較(float i = 0.56;float j = 0.56;比較 i == j 時,您有時會得到錯誤的結果)。 您應該使用 float.h 中的常量,如此所述。

由於計算機memory中此類數據的設備,用二進制符號<,>,==比較2個double數並不完全正確。例如比較2個double值:

var a: Double = 10.0
var b: Double = 10.0
print(a == b) // false

因此,您需要確定小數位精度以進行比較。

public extension Double {
    func greaterThan(_ value: Double, precise: Int) -> Bool {
        let denominator: Double = pow(10.0, Double(precise))
        let maxDiff: Double = 1 / denominator
        let realDiff: Double = self - value

        if fabs(realDiff) >= maxDiff, realDiff > 0 {
            return true
        } else {
            return false
        }
    }

    func greaterThanOrEqual(_ value: Double, precise: Int) -> Bool {
        let denominator: Double = pow(10.0, Double(precise))
        let maxDiff: Double = 1 / denominator
        let realDiff: Double = self - value

        if fabs(realDiff) >= maxDiff, realDiff >= 0 {
            return true
        } else if fabs(realDiff) <= maxDiff {
            return true
        } else {
            return false
        }
    }

    func lessThan(_ value: Double, precise: Int) -> Bool {
        let denominator: Double = pow(10.0, Double(precise))
        let maxDiff: Double = 1 / denominator
        let realDiff: Double = self - value

        if fabs(realDiff) >= maxDiff, realDiff < 0 {
            return true
        } else {
            return false
        }
    }

    func lessThanOrEqual(_ value: Double, precise: Int) -> Bool {
        let denominator: Double = pow(10.0, Double(precise))
        let maxDiff: Double = 1 / denominator
        let realDiff: Double = self - value

        if fabs(realDiff) >= maxDiff, realDiff <= 0 {
            return true
        } else if fabs(realDiff) <= maxDiff {
            return true
        } else {
            return false
        }
    }

    func equal(_ value: Double, precise: Int) -> Bool {
        let denominator: Double = pow(10.0, Double(precise))
        let maxDiff: Double = 1 / denominator
        let realDiff: Double = self - value

        if fabs(realDiff) <= maxDiff {
            return true
        } else {
            return false
        }
    }
}

用法:

var a: Double = 10.0
var b: Double = 10.0
print(a.equal(a, precise: 3)) // true

更新的答案

        var first_value = 10.20
        var second_value = 20.30

        if first_value.isLess(than: second_value) {
            print("first_value is not greater than second_value ")
        } else {
            print("first_value is greater than second_value ")
        }

請閱讀基本 swift 語法的介紹章節:

var first_value = 10.20
var second_value = 20.30
if first_value > second_value {
    println("some statement")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM