首页 > 编程语言 >如何使用Java获取货币符号?

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

时间:2022-12-10 18:23:51浏览次数:67  
标签:getSymbol Java getInstance 符号 Locale System 获取 println out

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

标签:getSymbol,Java,getInstance,符号,Locale,System,获取,println,out
From: https://www.cnblogs.com/zwwhnly/p/16972032.html

相关文章

  • java操作hadoop之MapReduce
    1.Mapper文件WordCountMapper.javapackagecom.hdfs;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoo......
  • 使用JavaWeb进行增删改查操作
    一、基本环境准备1、配置pop.xmlpop文件可以直接复制使用不作修改,也可以根据自己的需求进行增删依赖和插件 1<?xmlversion="1.0"encoding="UTF-8"?>2<project......
  • java运算符
    运算符基本了解运算符:对字面量或者对变量进行操作的符号表达式:用运算符把字面量或者变量连接起来(符合java语法的句子)就可以称为表达式,不同运算符连接的表达式体现......
  • flutter tabbar切换监听及索引获取
    参考:https://www.jianshu.com/p/f1347e658fa6 定义lateTabController_controller; 在 voidinitState()中监听 tabController=TabController(leng......
  • javascript:微信扫一扫下载android应用的引导页
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><!--background--><divsty......
  • c语言获取系统时间跨平台方法及计算程序运行时间
    voidgetCurrentDateTime(char*current_datetime){time_tnowtime;structtm*timeinfo;time(&nowtime);timeinfo=localtime(&nowtime);intxtn=t......
  • oracle/mysql/lightdb/postgresql java jdbc类型映射
    MySQL数据类型JAVA数据类型JDBCTYPE普通变量类型主键类型BIGINTLongBIGINT支持支持TINYINTByteTINYINT支持不支持SMALLINTShortSMALLINT支持不支持MEDIUMINTIntegerINTEGER......
  • 【Java】【数据库】B树
    B-树的形式(B-树就是B树,而且'-'是一个连接符号,不是减号。)B树的结构如下不同于B+树(关于B+树,我的这篇博客里有写:B+树)的一些特点:数据\(K_i\)左边的树不会将\(K_i\)......
  • 006爬虫之xpath获取猪八戒网商家信息
    今天来学习一个之后会一直用到的解析方式:xpath,这个是重点,必须会。首先我们需要安装lxml模块:pipinstalllxml用法:1、将要解析的html内容构造出etree对象;2、使用etree......
  • java 接口(interface)
    接口的作用:1.接口就是约束,它可以定义一些方法,让不同的人实现。2.接口不能被实例化,接口中没有构造方法。3.接口可以实现多个通过implement关键字去实现,实......