使用NSNumberFormatter填充货币符号和值之间的空格

时间:2010-02-28 22:04:53

标签: iphone cocoa currency padding nsnumberformatter

道歉,如果这是一个愚蠢的问题,但我正在尝试格式化我的iPhone应用程序的货币值,并且正在努力左对齐货币符号,但是正确地证明了价值。因此,“$ 123.45”的格式为(例如)

$   123.45
,具体取决于格式宽度。这是一种会计格式(我认为)。

我已经尝试过使用NSNumberFormatter的各种方法,但无法得到我需要的东西。

有人可以建议如何做到这一点吗?

由于

飞图

2 个答案:

答案 0 :(得分:4)

您正在寻找paddingPosition的{​​{1}}属性。您需要将其设置为NSNumberFormatter以获得所需的格式。

答案 1 :(得分:1)

这对我不起作用。通过这样做,我能够在货币符号和金额之间添加一个空格。

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中的金额。即美元用2位数表示,而日元用数字表示。所以这就是这个扩展将返回的内容:

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

千位和小数分隔符由用户区域设置确定。