如何使用java获取货币符号信息(如何使用Java获取货币符号?)
1. 前言
最近做了一个支付相关的需求 ,要求在收银台页面显示商品的价格时带上货币符号¥ ,类似下图中的格式:
最初我是用的下面这样的代码:
System.out.println(Currency.getInstance(Locale.CHINA).getSymbol());本机测试 ,正常返回¥ ,如下图所示:
但部署到服务器后 ,发现服务器返回的是CNY ,而不是预期的¥ 。
于是将上面的代码改成了下面这样:
System.out.println(Currency.getInstance("CNY").getSymbol(Locale.CHINA));本机测试 ,返回¥ ,部署到服务器后 ,也返回¥ 。
2. 原因分析
为什么Currency.getInstance(Locale.CHINA).getSymbol()在本机返回¥,而在服务器返回CNY呢?
带着这个疑问 ,看了下getSymbol()方法的源码 ,发现其内部有获取默认区域设置的逻辑:
因为我本机是简体中文环境,所以获取到的默认区域设置是zh_CN:
System.out.println(Locale.getDefault());这个和传入的Locale.CHINA是一致的:
因此在本机传不传Locale.CHINA ,都能正常返回¥ 。
而服务器上Locale.getDefault()返回的是en_US ,因此Currency.getInstance(Locale.CHINA).getSymbol()在服务器返回CNY,而指定了区域的话 ,Currency.getInstance("CNY").getSymbol(Locale.CHINA)就返回¥ 。
可以使用Locale.setDefault(Locale.US);修改默认的区域设置 ,这个将会影响程序的输出结果:
System.out.println(Locale.getDefault()); Locale.setDefault(Locale.US); System.out.println(Currency.getInstance(Locale.CHINA).getSymbol()); System.out.println(Currency.getInstance("CNY").getSymbol()); System.out.println(Currency.getInstance("CNY").getSymbol(Locale.CHINA)); System.out.println(Currency.getInstance("USD").getSymbol()); System.out.println(Currency.getInstance("USD").getSymbol(Locale.US)); System.out.println(Locale.getDefault());输出结果如下图所示:
从输出结果可以看出 ,刚开始的默认区域设置是zh_CN ,执行Locale.setDefault(Locale.US);修改默认区域设置后 ,下面的代码原本在本机是返回¥的 ,现在却返回了CNY:
System.out.println(Currency.getInstance(Locale.CHINA).getSymbol()); System.out.println(Currency.getInstance("CNY").getSymbol());但如果指定了区域设置的话System.out.println(Currency.getInstance("CNY").getSymbol(Locale.CHINA)); ,会正常返回¥ 。
因为修改了默认的区域设置为Locale.US ,因此不管指不指定区域设置 ,以下代码都返回$:
System.out.println(Currency.getInstance("USD").getSymbol()); System.out.println(Currency.getInstance("USD").getSymbol(Locale.US));因为此时获取到的默认区域设置en_US和指定的Locale.US是一致的:
综上所述:获取货币符号时,如果不想本机和服务器返回值不一致 ,要使用指定区域设置的getSymbol(Locale locale)方法 ,不要使用getSymbol()方法 。
推荐用法:
System.out.println(Currency.getInstance("CNY").getSymbol(Locale.CHINA)); System.out.println(Currency.getInstance("USD").getSymbol(Locale.US));3. 拓展知识
上面提到的CNY 、USD是货币代码,¥ 、$是其对应的货币符号 ,下面列举几个常用的货币代码及其对应的货币符号:
国家/地区/组织 货币名称 货币代码 货币符号 中国 人民币 CNY ¥ 美国 美元 USD $ 英国 英镑 GBP £使用java代码获取方式:
System.out.println("人民币:" + Currency.getInstance("CNY").getSymbol(Locale.CHINA)); System.out.println("美元:" + Currency.getInstance("USD").getSymbol(Locale.US)); System.out.println("英镑:" + Currency.getInstance("GBP").getSymbol(Locale.UK));输出结果:
详细的各国货币代码可以查看以下链接:
货币代码
ISO 4217
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!