Проблема в том, что вы должны установить для NumberFormatter minimumFractionDigits значение 4. Между прочим, нет необходимости инициализировать объект NSNumber. Вы можете использовать метод Formatters string (for: Any) и передать свой Float. Кстати, я бы использовал Double (64-битный) вместо Float (32-битный), и нет необходимости инициализировать новую строку g из вашего объекта formattedNumber. Это уже строка.
Другое дело, что вам не нужно знать местоположение периода, вы можете просто использовать contains
вместо метода rangeOfCharacter
. Ваш код должен выглядеть примерно так:
extension Formatter {
static let number: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter
}()
}
func formatNumber(from string: String) -> String? {
if string.contains(".") {
guard let value = Double(string) else { return nil }
Formatter.number.minimumFractionDigits = 4
return Formatter.number.string(for: value)
} else {
guard let value = Int(string) else { return nil }
Formatter.number.minimumFractionDigits = 0
return Formatter.number.string(for: value)
}
}
let label = UILabel()
let currentNumber = "996.3658"
label.text = formatNumber(from: currentNumber) // "996.3658\n"
Если вы хотите присвоить результат переменной вместо метки
if let formatted = formatNumber(from: currentNumber) {
textOutputToScreen = formatted
}