#swift #number-formatting #nsnumberformatter
#swift #форматирование чисел #nsnumberformatter
Вопрос:
У меня есть NumberFormatter
настройка, подобная следующей:
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.groupingSeparator = "."
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = Locale(identifier: "it_IT")
currencyFormatter.currencySymbol = ""
Мне нужно получить значение на основе строкового значения в качестве входных данных.
currencyFormatter.number(from: "1.000,00") // nil
currencyFormatter.number(from: "1.000,00u{00a0}") // 1000
В первом примере форматировщик возвращает nil
, а во втором я получаю правильное значение ( u{00a0}
символ неразрывного пробела).
Есть ли способ заставить первый образец работать без добавления символа пробела?
Комментарии:
1. Не имеет смысла. Вы ссылаетесь на два разных форматирования,
currencyFormatter
иformatter
.2. @matt моя ошибка при написании вопроса. исправлено
Ответ №1:
Если нет символа валюты, стиль этого средства форматирования чисел должен быть .decimal
, а не .currency
. Этого достаточно:
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .decimal
currencyFormatter.locale = Locale(identifier: "it_IT")
Комментарии:
1. Действительно, если вы скажете
.currency
, программа форматирования становится очень придирчивой к тому, что она примет (как вы уже обнаружили). Он ожидает, что за пробелом следует знак евро, и больше ничего не будет делать. Я не знаю, почему неразрывное пространство разрушает это. Но дело в том, что, если вы говорите.decimal
, оба ваших входных сигнала работают.