0

I am getting a particular double number from the webservice like 0.097 or 0.034 from the webservice. So if i am getting a particular number like 0.56 or 0.5 i need to add a zero in 0.56 and two zeros in 0.5. How to do this in swift3? Currently i am doing :

    class func appendString(data: Int) -> String {
    let value = data
    let formatter = NumberFormatter()
    formatter.minimumFractionDigits = 3 // for float
    formatter.maximumFractionDigits = 3 // for float
    formatter.minimumIntegerDigits = 1
    formatter.paddingPosition = .afterPrefix
    formatter.paddingCharacter = "0"
    return formatter.string(from: NSNumber(floatLiteral: Double(value)))!
  }

Any idea how to achieve th above told logic?

Dávid Pásztor
  • 51,403
  • 9
  • 85
  • 116
Chelsea Shawra
  • 1,593
  • 4
  • 22
  • 43
  • Maybe this: https://stackoverflow.com/questions/24051314/precision-string-format-specifier-in-swift – kometen Sep 11 '17 at 10:26

2 Answers2

6

The issue that you are passing data input in Int type, so it will always ignore fractions

see next example [Swift 3.1]

func formatNumber(_ number: Double) -> String? {

   let formatter = NumberFormatter()
   formatter.minimumFractionDigits = 3 // minimum number of fraction digits on right
   formatter.maximumFractionDigits = 3 // maximum number of fraction digits on right, or comment for all available
   formatter.minimumIntegerDigits = 1 // minimum number of integer digits on left (necessary so that 0.5 don't return .500)

   let formattedNumber = formatter.string(from: NSNumber.init(value: number))

   return formattedNumber

}

let formattedNumber = formatNumber(0.5)
print(formattedNumber) // Optional("0.500")
Ahmed Elzohry
  • 230
  • 3
  • 9
0

Just few small changes to your code :

func appendString(data: Double) -> String { // changed input type of data
    let value = data
    let formatter = NumberFormatter()
    formatter.minimumFractionDigits = 3 // for float
    formatter.maximumFractionDigits = 3 // for float
    formatter.minimumIntegerDigits = 1
    formatter.paddingPosition = .afterPrefix
    formatter.paddingCharacter = "0"
    return formatter.string(from: NSNumber(floatLiteral: value))! // here double() is not required as data is already double
}

print(appendString(data: 0.5)) // 0.500
Vini App
  • 7,339
  • 2
  • 26
  • 43