Ошибка форматера при изменении языка на устройстве
Я пытаюсь получить float number
от amount
строка с currency symbol
как "100,00". Работает правильно на английском языке. Когда в устройстве язык изменился на немецкий, его поведение меняется. Как я могу получить значение с плавающей запятой без влияния изменения языка в устройстве.
func getFloatNumberFromString(_ str: String) -> Float {
guard let number = NumberFormatter().number(from: str) else {
return 0.0
}
return number.floatValue
}
еще один фрагмент кода ниже, чтобы справиться с этим:
func removeFormatAmount() -> Double {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return formatter.number(from: self) as! Double? ?? 0
}
Когда я использую второй метод, то результат будет равен 0.
Пожалуйста, дайте мне знать, что мне не хватает, или предложите мне разобраться с этим. заранее спасибо
2 ответа
Решение
Во многих европейских странах десятичный разделитель - это запятая, а не точка.
Вы могли бы установить Locale
от форматера до фиксированного значения.
func float(from str: String) -> Float {
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
guard let number = formatter.number(from: str) else {
return 0.0
}
return number.floatValue
}
PS: я изменил подпись, чтобы соответствовать стилю Swift 3+
Вы пытались кастовать напрямую? Как это.
let floatString = "12.34"
let number = Double(floatString) ?? 0.0