Как решить iOS ошибку с локали десятичной запятой / запятой в расчетах? (с NumberFormatter)
У меня есть следующая проблема с вычислениями iOS, когда пользователь находится в разных локалях. Здесь, в Европе, разделитель десятичной точки - это ",", а в других местах это может быть ".". Пока пользователь находится в локали с "." все вычисления работают нормально, но когда вместо них используется запятая, я получаю сообщение об ошибке. Вот простой код:
if let expense = expenseTextField.text
let expenseValue = Double(expense)
let guests = guestTextField.text
let guestValue = Double(guests) {
let result = round((expenseValue / guestValue) * 100) / 100
resultLabel.text = priceString
//resultLabel.text = String(result)
} else {
resultLabel.text = "No values!"
}
Я почти уверен, что мне нужно использовать numberFormatter, насколько я понимаю другие вопросы здесь, но я не понимаю, как это сделать, и в документации не приводится пример того, как создать double или float из строки. Я попробовал следующее, но я получаю сообщение об ошибке, в котором говорится, что я не могу ни создавать двойные значения, ни использовать эти переменные для расчетов:
if let expense = expenseTextField.text
let expenseValue = String(expense),
let guests = guestTextField.text
let guestValue = String(guests) {
let expenseFormatter = NumberFormatter()
expenseFormatter.number(from: expenseValue)
let guestFormatter = NumberFormatter()
guestFormatter.number(from: guestValue)
let expenseDouble = Double(expenseFormatter)
let guestDouble = Double(guestFormatter)
let result = round((expenseDouble / guestDouble) * 100) / 100
resultLabel.text = priceString
} else {
resultLabel.text = "No values!"
}
Я не уверен, как создать реальные двойники из этих строк с помощью NumberFormatter, а затем использовать их в вычислениях.
Может кто-нибудь дать мне совет? Спасибо
1 ответ
Единственное, что вам нужно, это правильно написать вызов метода:
let expenseDouble = expenseFormatter.number(from: expenseValue)?.doubleValue ?? 0
let guestDouble = guestFormatter.number(from: guestValue)?.doubleValue ?? 0
Форматер / парсер напрямую преобразует строку в number
, Затем вы должны взять Double
ценность от этого. Обратите внимание, что синтаксический анализ может завершиться неудачно, и в этом случае вы должны решить необязательный результат, например, используя ?? 0
,