当前位置:  开发笔记 > 编程语言 > 正文

iOS中的欧元货币格式化程序在数字之前/之后移动符号

如何解决《iOS中的欧元货币格式化程序在数字之前/之后移动符号》经验,为你挑选了1个好方法。

我的应用程序中有欧元货币格式化程序.当用户最初将其从任何其他货币设置为欧元时,格式化程序将其显示为€1000.当应用程序重新启动时,它会将其更改为1000 €,有时它甚至会结束€1000 €!知道这里发生了什么吗?

func formatAsCurrency(currencyCode: String)  -> String? {
    let currencyFormatter = NSNumberFormatter()
    let isWholeNumber: Bool = floor(self) == self
    currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    currencyFormatter.maximumFractionDigits = isWholeNumber ? 0 : 2
    currencyFormatter.minimumFractionDigits = isWholeNumber ? 0 : 2
    currencyFormatter.locale = NSLocale(localeIdentifier: currencyCode)

    if let currencyString = currencyFormatter.stringFromNumber(self) {
        return currencyString
    }

    return nil
}

liamnichols.. 9

正如lgor所说,你想使用currencyCode而不是locale......这是否可以替代?

extension Double {

    /// Formats the receiver as a currency string using the specified three digit currencyCode. Currency codes are based on the ISO 4217 standard.
    func formatAsCurrency(currencyCode: String) -> String? {
        let currencyFormatter = NSNumberFormatter()
        currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        currencyFormatter.currencyCode = currencyCode
        currencyFormatter.maximumFractionDigits = floor(self) == self ? 0 : 2
        return currencyFormatter.stringFromNumber(self)
    }
}

300.00.formatAsCurrency("GBP")      // "£300"
129.92.formatAsCurrency("EUR")      // "€129.92"
(-532.23).formatAsCurrency("USD")   // "-$532.23"

还有一点值得指出为什么你在修改时会看到奇怪的格式化行为locale.通过更改locale,格式化程序根据该本地化应用不同的格式规则.

通常,您希望将语言环境设置为其默认值(NSLocale.currentLocale()),这样字符串的格式将本地化为用户语言.这通常用于十进制和千位分隔符之间的差异

如果您特别希望以特定方式格式化数字,那么您应该覆盖语言环境以确保事物保持一致.如果您担心使用什么分隔符,使用什么货币符号或在符号中放置符号,请务必将区域设置设置为特定的或确保覆盖所有相关属性NSNumberFormatter.

例如,如果我知道我希望我的数字格式化为美国英语语言环境,那么我会使用它NSLocale(localeIdentifier: "en_US_POSIX")来确保它没有区别.如果您不介意它对您的用户来说更加个性化,那么请不要费心指定区域设置.



1> liamnichols..:

正如lgor所说,你想使用currencyCode而不是locale......这是否可以替代?

extension Double {

    /// Formats the receiver as a currency string using the specified three digit currencyCode. Currency codes are based on the ISO 4217 standard.
    func formatAsCurrency(currencyCode: String) -> String? {
        let currencyFormatter = NSNumberFormatter()
        currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        currencyFormatter.currencyCode = currencyCode
        currencyFormatter.maximumFractionDigits = floor(self) == self ? 0 : 2
        return currencyFormatter.stringFromNumber(self)
    }
}

300.00.formatAsCurrency("GBP")      // "£300"
129.92.formatAsCurrency("EUR")      // "€129.92"
(-532.23).formatAsCurrency("USD")   // "-$532.23"

还有一点值得指出为什么你在修改时会看到奇怪的格式化行为locale.通过更改locale,格式化程序根据该本地化应用不同的格式规则.

通常,您希望将语言环境设置为其默认值(NSLocale.currentLocale()),这样字符串的格式将本地化为用户语言.这通常用于十进制和千位分隔符之间的差异

如果您特别希望以特定方式格式化数字,那么您应该覆盖语言环境以确保事物保持一致.如果您担心使用什么分隔符,使用什么货币符号或在符号中放置符号,请务必将区域设置设置为特定的或确保覆盖所有相关属性NSNumberFormatter.

例如,如果我知道我希望我的数字格式化为美国英语语言环境,那么我会使用它NSLocale(localeIdentifier: "en_US_POSIX")来确保它没有区别.如果您不介意它对您的用户来说更加个性化,那么请不要费心指定区域设置.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有