用货币代码解析(本地化)价格的正确方法?

时间:2019-06-18 07:30:05

标签: java android kotlin price

我正在尝试找到一种使用正确的逗号,空格,将其他分隔符位置指向并定位货币代码的正确方法,将货币代码正确地设置为后缀或前缀。另外,我想使用负数。

我发现了什么?

我正在尝试Google并尝试每种解决方案,最简单的方法是:

private val format: DecimalFormat = NumberFormat.getCurrencyInstance(globalLocale) as DecimalFormat

fun format(amount: Double, currencyCode: String): String {
    format.currency = Currency.getInstance(currencyCode)
    return format.format(amount)
}

其中globalLocaleLocale.getDefault()->手机的语言环境。

问题在于负数,出于某些原因,它用括号括起来,调用format(-10.00, "EUR")返回(EUR10.00)

我找到了一种解决方案,以应用模式:

format.applyPattern("$#,##0.00;-$#,##0.00"),但是这种硬编码会阻止货币符号的位置和空格/逗号/点的本地化。

如何获得此结果?

  1. 传递amountcurrencyCode并获得正确的localised价格,而没有带负号的括号吗?

编辑 似乎只有Locale.US才有这个问题,所以问题是如何避免在美国语言环境中出现括号?

1 个答案:

答案 0 :(得分:0)

object Currency {
    fun format(num: Double, currency: String, maxFractionDigits: Int?): String {
        val format = NumberFormat.getCurrencyInstance(Locale.getDefault())
        format.maximumFractionDigits = maxFractionDigits ?: 0
        val cFormat = Currency.getInstance(currency)
        format.currency = cFormat
        return format.format(num)
    }
}




    val amountStr = Currency.format(
        budgetAllocationModel.used ?: 0.0,
        budgetAllocationModel.currency ?: "USD", 0
    )

货币是我用来通过Local.getDefault()获取货币的本地字符串来隐藏货币的对象。

amountStr是使用该对象的示例