android 货币格式化,Android 国际货币格式化的示例代码

简评:今天介绍下 Android 中国际货币格式化的一个小小知识点。

目前为止,货币格式化最简单的方式是调用 NumberFormat.getCurrencyInstance() 获得 NumberFormat 实例来把数字格式化为货币格式的字符串(当然也可以把字符串转换成数字)。可以根据当前设备的位置来获取 java.util.Currency 实例再以此进行货币的格式化。

但如果我们的应用只接受特定的几种货币,那这种随着用户设备位置而修改货币格式就不是一个好的做法。

你可能会说「这简单啊,那就在国内默认显示人民币,其他国家就显示美元嘛」。

嗯,你很有想法。。。

这里就要讲到这篇文章的重点了。

假设你给美国地区展示的是 $1,那他们会默认这是 1 美元,这没问题。

但世界上还有超过二十个国家和地区的本地货币也叫 dollar ($),比如加拿大、澳大利亚和新西兰。这时候如果你还是展示 $1,那这些国家的用户就会默认这是指他们的货币,这就会造成误解,让用户觉得你们的收费不对。

因此,如果当前用户是在加拿大的,而商品价格需要为美元,那么在进行格式化时还需要明确符号,以表明显示的是美元而不是加元。

下面是 Kotlin 代码的一个例子:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

textView1.text = formatCurrency(1f, CURRENCY_US_DOLLARS, LANGUAGE_ENGLISH, COUNTRY_US)

textView2.text = formatCurrency(1f, CURRENCY_US_DOLLARS, LANGUAGE_ENGLISH, COUNTRY_CANADA)

textView3.text = formatCurrency(1f, CURRENCY_US_DOLLARS, LANGUAGE_ENGLISH, COUNTRY_AUSTRALIA)

}

private fun formatCurrency(amount: Float, currency: String, language: String, country: String) =

currencyInLocale(currency, language, country).format(amount)

private fun currencyInLocale(

currencyCode: String,

language: String,

country: String = "",

variant: String = ""): NumberFormat =

Locale(language, country, variant).let {

NumberFormat.getCurrencyInstance(it).apply {

currency = Currency.getInstance(currencyCode)

}

}

companion object {

private const val CURRENCY_US_DOLLARS: String = "USD"

private const val LANGUAGE_ENGLISH: String = "EN"

private const val COUNTRY_US: String = "US"

private const val COUNTRY_CANADA: String = "CA"

private const val COUNTRY_AUSTRALIA: String = "AU"

}

}

展示效果,从上到下分别是美国、加拿大和澳大利亚:

1f1fc1b4de747a4fad523b43593e2a5d.png

这里对于加拿大显示 US$,而澳大利亚显示 USD。虽然两者都能理解,但能符合各语言环境的具体情况当然还是更好的。

虽然这可能只是一个小知识点,但我个人觉得知道了还是蛮有用的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值