将货币更改为货币格式化程序

Posted

技术标签:

【中文标题】将货币更改为货币格式化程序【英文标题】:Change the currency to a currency formatter 【发布时间】:2019-10-21 15:05:34 【问题描述】:

我有以下方法来构建货币格式化程序。有 2 个输入字段,区域设置和货币:

    private fun getCurrencyDecimalFormat(locale: Locale, currency: Currency): DecimalFormat 
        val currencyFormat = NumberFormat.getCurrencyInstance(locale) as DecimalFormat
        currencyFormat.positivePrefix = currencyFormat.positivePrefix + " "
        currencyFormat.roundingMode = RoundingMode.DOWN 
        val symbol = currency.getSymbol(locale)
        val decimalFormatSymbols = currencyFormat.decimalFormatSymbols
        decimalFormatSymbols.currencySymbol = symbol
        currencyFormat.decimalFormatSymbols = decimalFormatSymbols
        currencyFormat.isParseBigDecimal = true
        return currencyFormat
    

它是这样称呼的:

    val currencyFormat = getCurrencyDecimalFormat(locale, currency)
    return currencyFormat.format(amount)

当货币输入与语言环境输入的货币相同时,它可以正常工作,所以:

语言环境:es_ES,货币:EUR = 0,00 € -> OK 语言环境:en_US,货币:USD = $ 0.00 -> OK

但如果我们有以下情况,那就错了:

语言环境:es_ES,货币:USD = 0,00 $ -> KO 语言环境:en_US,货币:EUR = $ 0.00 -> KO

似乎货币设置不正确......有什么想法吗?我做错了什么?

【问题讨论】:

【参考方案1】:

这似乎是由于这一行:

currencyFormat.positivePrefix = currencyFormat.positivePrefix + " "

此时的正前缀取决于所传递语言环境的货币。例如,如果您以getCurrencyDecimalFormat(Locale.US, Currency.getInstance("EUR")) 的形式调用您的方法,那么此时您的currencyFormat 将绑定到美元(currencyFormat.positivePrefix 的结果为$)。

将此行进一步向下移动,在设置格式符号下方。但是TBH我什至不确定你为什么需要它。货币符号后有一个空格应该取决于语言环境而不是硬编码。

fun getCurrencyDecimalFormat(locale: Locale, currency: Currency): DecimalFormat 
    val currencyFormat = NumberFormat.getCurrencyInstance(locale) as DecimalFormat

    currencyFormat.roundingMode = RoundingMode.DOWN

    val symbol = currency.getSymbol(locale)
    val decimalFormatSymbols = currencyFormat.decimalFormatSymbols

    decimalFormatSymbols.currencySymbol = symbol

    currencyFormat.decimalFormatSymbols = decimalFormatSymbols
    currencyFormat.isParseBigDecimal = true
    currencyFormat.positivePrefix = currencyFormat.positivePrefix + " "

    return currencyFormat

【讨论】:

以上是关于将货币更改为货币格式化程序的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的货币格式 - 100 到 1.00 美元

如何将 NumberFormat 从特定货币更改为美元货币

如何更改数据库中每个字段的每个格式?

不同地区用户的货币格式化原则

php 将货币单位从đ更改为VNĐ

Java中的货币解析