Борьба с NSNumberFormatter в Swift для десятичных чисел
У меня есть 2 функции, которые преобразуют строки (десятичные числа, передаваемые в виде строки) в локализованные числа, и наоборот. Вот код:
static func localizedNumberForText(text: String) -> String {
let num = Double(text)
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 30;
if num != nil {
return formatter.string(from: num! as NSNumber)!
} else {
return text
}
}
static func stringFromLocalizedNumber(text: String) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 30;
let num = formatter.number(from: text)
if let number = num {
return String(describing: number)
} else {
return text
}
}
Это прекрасно работает со статическими значениями, но у меня есть проблема, которая пока UITextField
редактируется мне нужно отформатировать локализованную строку по-другому. Вот пример, который работает:
- У меня есть номер 123456789, и он хорошо локализован с разделителем тысяч во время отображения следующим образом: 123.456.789
Но когда пользователь внутри UITextField
удаляет последний символ из этой строки, он становится 123.456.78 и в функции stringFromLocalizedNumber не удается получить num
из текста, потому что отформатированный текст неправильно локализован. Любая идея, как я могу решить эту проблему?
Чего я хочу добиться, так это после того, как пользователь удалит числовой символ или добавит его, чтобы удалить неправильную локализацию и применить новую, которая правильно анализирует эту строку как число.