如何使用Java获取货币符号?(如何使用java获取货币符号)

  本篇文章为你整理了如何使用Java获取货币符号?(如何使用java获取货币符号)的详细内容,包含有如何使用java获取货币符号数据 如何使用java获取货币符号 java 货币类型 java人民币符号 如何使用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是货币代码,¥、$是其对应的货币符号,下面列举几个常用的货币代码及其对应的货币符号:

  
使用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

  以上就是如何使用Java获取货币符号?(如何使用java获取货币符号)的详细内容,想要了解更多 如何使用Java获取货币符号?的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: