Номер Numberformatter из строки с разделителем группировки

#ios #swift #currency #numberformatter

#iOS #swift #Валюта #numberformatter

Вопрос:

У меня NumberFormatter есть стиль номера валюты. Я могу успешно отформатировать свой номер в строку. Однако, когда я пытаюсь получить число из строки, оно возвращает null. Проблема возникает, когда строка имеет разделитель группировки.

Мой форматировщик:

 let groupingSeparator = "."
let decimalSeparator = ","
let formatter = NumberFormatter()
formatter.maximumIntegerDigits = 6
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 0
formatter.numberStyle = .currency
formatter.groupingSize = 3
formatter.groupingSeparator = groupingSeparator
formatter.currencyGroupingSeparator = groupingSeparator
formatter.usesGroupingSeparator = true
formatter.decimalSeparator = decimalSeparator
formatter.currencyDecimalSeparator = decimalSeparator
formatter.currencySymbol = viewModel?.currency?.symbol ?? ""
 

Как я пытаюсь получить число из строки:

 if let number = amountFormatter.number(from: currentInput) {
        text = amountFormatter.string(from: number)
}
 

Рабочие тексты:

 $1459
$2345,23
 

Не рабочие тексты:

 $1.459
$2.333,49
 

Ответ №1:

Я подозреваю, что ваша константа let groupingSeparator пуста. Когда я запускаю следующий код:

 let groupingSeparator = "."

let formatter = NumberFormatter()
formatter.maximumIntegerDigits = 6
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 0
formatter.numberStyle = .currency
formatter.groupingSize = 3
formatter.groupingSeparator = groupingSeparator
formatter.currencyGroupingSeparator = groupingSeparator
formatter.usesGroupingSeparator = true
formatter.decimalSeparator = decimalSeparator
formatter.currencyDecimalSeparator = decimalSeparator



let strings = ["$1459",
               "$2345,23",
               "$1.459",
               "$2.333,49"
]

strings.forEach { value in
    let string = formatter.number(from: value)?.description ?? "nil"
    print("Value for "(value)" = (string)")
}
 

Я получаю вывод

 Value for "$1459" = 1459
Value for "$2345,23" = 2345.23
Value for "$1.459" = 1459
Value for "$2.333,49" = 2333.49
 

Точно так, как ожидалось.

(Обратите внимание, что я нахожусь в США, поэтому в выводе по умолчанию для NSNumber.description используется десятичный разделитель «.».)

Комментарии:

1. Извините, что не добавил, но он был заполнен.

2. Попробуйте запустить код, который я опубликовал в проекте. Это работает.