Ошибка форматера при изменении языка на устройстве

Я пытаюсь получить 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
Другие вопросы по тегам