热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

简评:今天介绍下 Android 中国际货币格式化的一个小小知识点。 目前为止,货币格式化最简单的方式是调用 NumberFormat.g

简评:今天介绍下 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"
  }
}

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

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

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

原文: Currency Curiosities

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


推荐阅读
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • Java与JSON互转:实现JSON到Java对象及Java对象到JSON的转换
    本文详细介绍了如何在Java中实现JSON数据与Java对象之间的相互转换,包括代码示例和常见问题解决方法。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • 如何恢复CAD中意外丢失的图纸数据
    当使用CAD进行绘图时,因突然断电或其他原因导致计算机关闭可能会造成工作数据的丢失。然而,通过利用CAD软件的自动保存功能,用户通常能够恢复至最近一次自动保存的数据状态。 ... [详细]
  • 本文深入探讨 PHPCMS 平台中的字符串截取函数 str_cut 的使用方法,该函数常用于控制输出的标题或内容摘要长度,有效避免因过长的文本导致的页面布局问题。通过本文,读者将掌握如何灵活运用此函数,包括处理 HTML 标签等高级技巧。 ... [详细]
  • JavaWeb技术架构解析
    本文探讨了JavaWeb开发中客户端与服务器端的交互模式,重点分析了B/S(浏览器/服务器)和C/S(客户端/服务器)两种架构的特点及应用场景。 ... [详细]
  • 本文介绍了如何使用JavaScript和jQuery实现页面元素随着滚动条的移动而相应变化位置的功能,提供了一段简洁的代码示例。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 无论是初学者还是经验丰富的开发者,W3CSchool都是一个不可或缺的资源库。本文将介绍几个关键的学习资源,帮助您提升网页开发技能。 ... [详细]
  • 随着iTunes界面的更新,用户发现通过该平台安装IPA文件变得不再可能。面对这一变化,除了苹果官方推荐的TestFlight外,还有哪些高效便捷的方法呢?本文将为您详细介绍几种替代方案。 ... [详细]
  • BFS深搜hashtable来判断是横线还是竖线但是为啥还是90分啊呜呜!找不到原因#define_CRT_SECURE_NO_WARNINGS1#include ... [详细]
  • 在M1 Mac上使用Xcode编译iOS模拟器项目时,可能会遇到错误提示 'building for iOS Simulator, but linking in object file built for iOS, for architecture arm64',本文将提供解决方案。 ... [详细]
  • 在与客户的互动中,我们经常被问及BI系统是否提供了特定行业的解决方案。实际上,作为数据分析工具,BI系统的通用性远大于其行业针对性。本文将探讨BI系统的通用性和行业适应性。 ... [详细]
author-avatar
白大姐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有