首页IT科技如何使用java获取货币符号信息(如何使用Java获取货币符号?)

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

时间2025-06-20 20:22:47分类IT科技浏览4328
导读:1. 前言 最近做了一个支付相关的需求,要求在收银台页面显示商品的价格时带上货币符号¥,类似下图中的格式:...

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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
汉诺塔用python(python汉诺塔递归函数是什么?)