Я работаю над приложением, в котором мне нужно отображать валюту в формате ниже
$ 222,345.00 (Symbole depends on location/country. May be $,R etc)
Я пытаюсь установить, используя приведенный ниже код
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .currency
if let formattedTipAmount = formatter.string(from: NSNumber(value:amountDouble)) {
self.amountLabel.text= "\(formattedTipAmount)"
}
Над кодом добавьте правильный символ валюты, но для некоторых стран в коде выше добавлено ',' в качестве десятичной точки, а также нет разделителя ',', если есть огромная сумма.
Подскажите, пожалуйста, что я делаю не так.
@MartinR да, но требуется добавить. для десятичного разделителя и для разделителя чисел
Затем установите соответствующие свойства NumberFormatter. Все это можно настроить.
@MartinR, пожалуйста, объясните, если возможно.
@Gagan_iOS Ваше требование плохое. Это сбивает с толку большинство пользователей вашего приложения. Пожалуйста, убедите любого, кто принял решение, что ему нужно пересмотреть свой выбор. Пусть NumberFormatter выполнит свою работу и покажет валюту в ожидаемом формате для локали пользователя.
@rmaddy Я не согласен, по крайней мере, для некоторых сценариев, поскольку, например, я думаю, что было бы запутанно, если бы у меня был столбец в таблице с суммами, а формат менялся от строки к строке в зависимости от валюты. Было бы очень трудно читать.
@JoakimDanielson Я вообще этого не предлагаю. Все валюты будут отформатированы одинаково, но это форматирование должно основываться на локали зрителя, а не на каком-то жестком коде, выбранном каким-либо менеджером, который не понимает локализацию.





Хорошо, поэтому поведение символа "," для некоторых мест (думаю, почти для всей Европы) является правильным. Чтобы убедиться, что у больших чисел также есть разделитель (в Европе это будет.), Вы должны добавить атрибут usesGroupSeperator для NumberFormatter. Итак, чтобы это работало с вашим кодом, вам нужно будет изменить его на следующее:
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .currency
formatter.usesGroupingSeparator = true
if let formattedTipAmount = formatter.string(from: NSNumber(value:amountDouble)) {
self.amountLabel.text= "\(formattedTipAmount)"
}
однако, если вы хотите изменить разделитель группировки и десятичный разделитель, вы можете сделать это, добавив в свой код следующие 2 атрибута. Если GroupingSeparator используется для изменения разделителя больших чисел, а DecimalSeparator используется для разделителя десятичных знаков.
formatter.currencyGroupingSeparator = ","
formatter.currencyDecimalSeparator = "."
Не меняйте группировку или десятичные разделители. Это приведет к очень запутанному выводу для многих людей во всем мире.
Я не говорю, что он должен это сделать, но поскольку об этом говорили в комментариях, я подумал, что скажу ему, что это возможно и как вы могли бы этого добиться. Я абсолютно не советую это, хотя
В некоторых странах (например, в Германии) запятая является является десятичным разделителем, и по умолчанию разделитель группировки не используется. - Значит, вы, скорее всего, ничего плохого не делаете.