币种的NumberFormat返回不同android版本上相同语言环境的differentnet值

问题描述 投票:0回答:1

我在“ es哥伦比亚”和“ es墨西哥”语言环境中格式化我的货币,有时我需要一种,有时我需要另一种。

问题在于,该格式会根据Android版本返回不同的值。

我通过两种不同的方式获取语言环境:

// Option 1
val locale = Locale("es_CO")

// Option 2
val locale = Locale.getAvailableLocales().firstOrNull {
    it.language == "es" && it.displayCountry.compareTo("Colombia", true) == 0
}

然后我将其格式化为:

val formatter = DecimalFormat.getCurrencyInstance(locale).apply {
    minimumFractionDigits = 0
    maximumFractionDigits = 0
}


// On Android 28
formatter.format(1000000) ->  "$ 1.000.000"

// On Android 17
formatter.format(1000000) ->  "1.000.000 $"

我还检查formatter.currency是否正在更改,但两个Android版本都相同。

为什么?

android locale currency-formatting
1个回答
0
投票

我最终还是手动完成,但仍然感觉这不是正确的解决方案,但是它可以在多个Android版本上使用:

    val formatter = NumberFormat.getCurrencyInstance(locale)

    (formatter as? DecimalFormat)?.apply {
        val cleanPattern = toPattern().replace("¤", "").trim()
        applyPattern("¤ $cleanPattern")
    }

    // Use formatter
© www.soinside.com 2019 - 2024. All rights reserved.