首頁 Swift 數字處理大全
文章
取消

Swift 數字處理大全

也可以到我的 Gist 看完整的 code 😄

無條件進位 (小數,整數)

整數的無條件進位

1
2
3
ceil(11.2)
// print 12
// ceil 的意思是天花板

無條件進位至 小數第x位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
extension Double {
    func ceiling(toDecimal decimal: Int) -> Double {
        let numberOfDigits = abs(pow(10.0, Double(decimal)))
        if self.sign == .minus {
            return Double(Int(self * numberOfDigits)) / numberOfDigits
        } else {
            return Double(ceil(self * numberOfDigits)) / numberOfDigits
        }
    }
}

123.12345.ceiling(toDecimal: 3)
// print 123.124
 
(-123.12345).ceiling(toDecimal: 3)
// print -123.123

無條件進位至 整數第x位

1
2
3
4
5
6
7
8
9
10
11
12
13
extension Double {
    func ceiling(toInteger integer: Int = 1) -> Double {
        let integer = integer - 1
        let numberOfDigits = pow(10.0, Double(integer))
        return Double(ceil(self / numberOfDigits)) * numberOfDigits
    }
}

123.12345.ceiling(toInteger: 2)
// print 130.0

(-123.12345).ceiling(toInteger: 2)
// print -120.0

四捨五入 (小數,整數)

1
2
3
4
5
6
lround(11.2) -> Int
// print 11

round(11.5) -> Double
// print 12.0

四捨五入至 小數第x位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension Double {
    func rounding(toDecimal decimal: Int) -> Double {
        let numberOfDigits = pow(10.0, Double(decimal))
        return (self * numberOfDigits).rounded(.toNearestOrAwayFromZero) / numberOfDigits
    }
}

24.141.rounding(toDecimal: 2)
// 24.14

24.145.rounding(toDecimal: 2)
// 24.15

(-24.141).rounding(toDecimal: 2)
// -24.14

(-24.145).rounding(toDecimal: 2)
// -24.15

四捨五入至 整數第x位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
extension Double {
    func rounding(toInteger integer: Int) -> Double {
        let integer = integer - 1
        let numberOfDigits = pow(10.0, Double(integer))
        return (self / numberOfDigits).rounded(.toNearestOrAwayFromZero) * numberOfDigits
    }
}

124.141.rounding(toInteger: 2)
// 120.0
 
125.141.rounding(toInteger: 2)
// 130.0
 
(-124.141).rounding(toInteger: 2)
// -120.0
 
(-125.141).rounding(toInteger: 2)
// -130.0

無條件捨去 (小數,整數)

1
2
Int(11.24)
// print 11

無條件捨去至 小數第x位

1
2
3
4
5
6
7
8
9
10
11
12
extension Double {
    func floor(toDecimal decimal: Int) -> Double {
        let numberOfDigits = pow(10.0, Double(decimal))
        return (self * numberOfDigits).rounded(.towardZero) / numberOfDigits
    }
}

124.141.floor(toDecimal: 2)
// print 124.14

(-124.141).floor(toDecimal: 2)
// print -124.14

無條件捨去至 整數第x位

1
2
3
4
5
6
7
8
9
10
11
12
13
extension Double {
    func floor(toInteger integer: Int) -> Double {
        let integer = integer - 1
        let numberOfDigits = pow(10.0, Double(integer))
        return (self / numberOfDigits).rounded(.towardZero) * numberOfDigits
    }
}

124.141.floor(toInteger: 2)
// print 120.0
 
(-124.141).floor(toInteger: 2)
// print -120.0
本文由作者按照 CC BY 4.0 進行授權