Swift number formatting

前端 未结 4 1083
深忆病人
深忆病人 2021-02-08 08:10

I am just starting to get to know Swift but I am having a serious problem with number formatting at an extremely basic level.

For example, I need to display an integer w

相关标签:
4条回答
  • 2021-02-08 08:24

    There is a simple solution I learned with "We <3 Swift", which is so easy you can even use without Foundation, round() or Strings, keeping the numeric value.

    Example:

    var number = 31.726354765
    var intNumber = Int(number * 1000.0)
    var roundedNumber = Double(intNumber) / 1000.0
    

    result: 31.726

    0 讨论(0)
  • 2021-02-08 08:29

    You can still use good ole NSLog("%.2f",myFloatOrDouble) too :D

    0 讨论(0)
  • 2021-02-08 08:34

    Here's a POP solution to the problem:

    protocol Formattable {
        func format(pattern: String) -> String
    }
    extension Formattable where Self: CVarArg {
        func format(pattern: String) -> String {
            return String(format: pattern, arguments: [self])
        }
    }
    extension Int: Formattable { }
    extension Double: Formattable { }
    extension Float: Formattable { }
    
    let myInt = 10
    let myDouble: Double = 0.01
    let myFloat: Float = 1.11
    
    print(myInt.format(pattern: "%04d"))      // "0010
    print(myDouble.format(pattern: "%.2f"))   // "0.01"
    print(myFloat.format(pattern: "$%03.2f")) // "$1.11"
    print(100.format(pattern: "%05d"))        // "00100"
    
    0 讨论(0)
  • 2021-02-08 08:41

    You can construct a string with a c-like formatting using this constructor:

    String(format: String, arguments:[CVarArgType])
    

    Sample usage:

    var x = 10
    
    println(String(format: "%04d", arguments: [x])) // This will print "0010"
    

    If you're going to use it a lot, and want a more compact form, you can implement an extension like this:

    extension String {
        func format(arguments: [CVarArgType]) -> String {
            return String(format: self, arguments: arguments)
        }
    }
    

    allowing to simplify its usage as in this example:

    "%d apples cost $%03.2f".format([4, 4 * 0.33])
    
    0 讨论(0)
提交回复
热议问题