popeyelau / wiki

📒Wiki for many useful notes, source, commands and snippets.
2 stars 0 forks source link

Swift 格式化数字 #2

Open popeyelau opened 5 years ago

popeyelau commented 5 years ago
import Foundation

extension Formatter {
    static let number = NumberFormatter()
}

extension FloatingPoint {
    func fractionDigits(min: Int = 2, max: Int = 2, roundingMode: NumberFormatter.RoundingMode = .down) -> String {
        Formatter.number.minimumFractionDigits = min
        Formatter.number.maximumFractionDigits = max
        Formatter.number.roundingMode = roundingMode
        Formatter.number.numberStyle = .decimal
        return Formatter.number.string(for: self) ?? ""
    }
}

extension String {
    var doubleValue: Double? {
        return Formatter.number.number(from: self)?.doubleValue
    }
    var intValue: Int?  {
        return Formatter.number.number(from: self)?.intValue
    }
    var floatValue: Float? {
        return Formatter.number.number(from: self)?.floatValue
    }
}

let num = 1.4988
num.fractionDigits() //1.49
num.fractionDigits(min: 2, max: 3, roundingMode: .down) //1.498
num.fractionDigits(min: 2, max: 3, roundingMode: .up) //1.499

let str = "123.88"
str.doubleValue //123.88
str.intValue //123
str.floatValue //123.88
str.floatValue?.fractionDigits(min: 1, max: 1, roundingMode: .up) //123.9