我有以下方法来构建货币格式程序。有两个输入字段,区域设置和货币:
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)
当货币输入与语言环境输入的货币相同时,它可以正常工作,因此:
但是,如果我们有以下内容,那就错了:
似乎币种设置不正确...有什么主意吗?我做错了什么?
答案 0 :(得分: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
}