Использование NSNumberFormatter для заполнения пробелов между символом валюты и значением - PullRequest
1 голос
/ 01 марта 2010

Извиняюсь, если это глупый вопрос, но я пытаюсь отформатировать значение валюты для своего приложения для iphone и пытаюсь выровнять по левому краю символ валюты, но выровнять по правому краю значение. Таким образом, «$ 123,45» форматируется как (скажем)

$   123.45
в зависимости от ширины формата. Это своего рода формат учета (я думаю).

Я пробовал различные методы с NSNumberFormatter, но не могу получить то, что мне нужно.

Может кто-нибудь посоветовать, как это сделать?

Спасибо

Fitto

Ответы [ 2 ]

4 голосов
/ 01 марта 2010

Вы ищете paddingPosition свойство NSNumberFormatter. Вам необходимо установить значение NSNumberFormatterPadAfterPrefix для нужного формата.

2 голосов
/ 14 декабря 2016

Это не сработало для меня.Я смог добавить пробел между символом валюты и суммой.

Swift 3.0

currencyFormatter.negativePrefix = "\(currencyFormatter.negativePrefix!) "
currencyFormatter.positivePrefix = "\(currencyFormatter.positivePrefix!) "

Полный код:

extension Int {
    func amountStringInCurrency(currencyCode: String) -> (str: String, nr: Double) {
        let currencyFormatter = NumberFormatter()
        currencyFormatter.usesGroupingSeparator = true
        currencyFormatter.numberStyle = .currency
        currencyFormatter.currencyCode = currencyCode
        currencyFormatter.negativePrefix = "\(currencyFormatter.negativePrefix!) "
        currencyFormatter.positivePrefix = "\(currencyFormatter.positivePrefix!) "

        let nrOfDigits = currencyFormatter.maximumFractionDigits
        let number: Double = Double(self)/pow(10, Double(nrOfDigits))
        return (currencyFormatter.string(from: NSNumber(value: number))!, number)
    }
}

Это расширение для Int, которое выражает сумму в MinorUnits.Т.е. доллар выражается двумя цифрами, а японская иена - без цифр.Вот что вернуло это расширение:

let amountInMinorUnits: Int = 1234
amountInMinorUnits.amountStringInCurrency(currencyCode: "USD").str // $ 12.34
amountInMinorUnits.amountStringInCurrency(currencyCode: "JPY").str // JP¥ 1,234

Разделитель тысяч и десятичных знаков определяется языком пользователя.

...