NumberFormat以及其子类的使用

#

从上面的结构图可以看出来,Format类是最根本的父类;

一、Format

源码可以看到对这个类的说明:
Format is an abstract base class for formatting locale-sensitive information such as dates, messages, and numbers.
Format是一个抽象基类,用于格式化区域设置敏感信息,如日期、消息和数字

Format其具体子类必须实现两个抽象方法

  • format(Object obj, StringBuffer toAppendTo, FieldPosition pos) 用于将对象格式化为指定模式的字符串
  • parseObject(String source, ParsePosition pos) 用于将字符串重新解析为对象

Format的直接子类包括DateFormat、NumberFormat和MessageFormat。

通过ctrl+h查看Format的继承关系
在这里插入图片描述

二、DateFormat

DateFormat根据当前语言环境格式化日期和时间。

DateFormat是一个抽象类,所以不能直接new创建实例对象。但该类为我们提供了工厂方法( public final static 修饰的方法)方便我们使用。

  1. getDateInstance()方法,获取格式化的日期,输出样式:2015-12-10

  2. getDateTimeInstance()方法,获取格式化的日期和时间,输出样式:2015-12-10

10:21:41

  1. getTimeInstance()方法,获取格式化的时间,输出样式:10:21:41

  2. getInstance()方法,获取格式化的日期和时间,输出样式:15-12-10

2.1 SimpleDateFormat

SimpleDateFormat是DateFormat的一个具体类,它允许我们指定格式模式从而获取我们理想的格式化日期和时间。

通过SimpleDateFormat的构造方法你可以传入一个格式模式字符串或者通过applyPattern(String pattern)方法添加一个格式模式字符串。

Date date = new Date();

SimpleDateFormat format = new SimpleDateFormat("今天是yyyy-MM-dd E hh:mm:ss,是yyyy年的第DD天,在该月是第dd天");

System.out.println(format.format(date));

将会输出:今天是2015-12-10 星期四 09:38:16,是2015年的第344天,在该月是第10天


三、NumberFormat

NumberFormat根据当前语言环境格式化数字;

NumberFormat同样是一个抽象基类,可以使用API中的工厂方法获取实例对象:

  1. getCurrencyInstance()方法,根据当前语言环境获取货币数值格式。传递Locale对象可以获取指定语言环境下的货币数值格式,比如
		NumberFormat format = NumberFormat.getCurrencyInstance(Locale.CANADA);

		System.out.println(format.format(439.6));

			将会输出:$439.60
  1. getInstance()和getNumberInstance()方法都会获取到常规数值格式

  2. getIntegerInstance()方法获取常规整数值格式,如果需要格式化的数值为小数,则会将数值四舍五入为最接近的整数

  3. getPercentInstance()方法获取百分比的数值格式

NumberFormat有两个具体实现子类DecimalFormat和ChoiceFormat
在这里插入图片描述

3.1 DecimalFormat

DecimalFormat同SimpleDateFormat类似,允许我们指定格式模式获取我们想要的格式化数值

DecimalFormat类对于数值的小数部分,默认显示3位小数,在去掉超出小数点后面3位的部分时,会将数值四舍五入为最接近的数值格式化输出。淡然我们可以对这个默认进行设置

setMaximumFractionDigits(int newValue)方法,设置小数部分中允许的最大数字位数

setMinimumFractionDigits(int newValue)方法,设置小数部分中允许的最小数字位数,如果原数小数位数不够的话,会补零。

对于数值的整数部分,默认3个数字为一组进行显示,同样对此我们也可以自定义;

  1. setGroupingSize(int i)方法,设置分组中一组的位数。

  2. setGroupingUsed(boolean value)方法设置是否使用分组,true表示使用,false表示取消分组

  3. setMaximumIntegerDigits(int newValue)方法设置整数部分允许的最大数字位数

  4. setMinimumIntegerDigits(int newValue)方法设置整数部分允许的最小数字位数

格式模式元素

0 表示一个数字,被格式化数值不够的位数会补0

# 表示一个数字,被格式化数值不够的位数会忽略

. 小数点分隔符的占位符

, 分组分隔符的占位符

- 缺省负数前缀

% 将数值乘以100并显示为百分数

\u2030 将数值乘以1000并显示为千分数

例子:

DecimalFormat format1 = new DecimalFormat("#\u2030");

System.out.println(format1.format(0.3345));//输出334%。

DecimalFormat format2 = new DecimalFormat("##.##");

System.out.println(format2.format(12.3)); // 12.3

DecimalFormat format3 = new DecimalFormat("0000.00");

System.out.println(format3.format(12.3)); //12.30

DecimalFormat format4 = new DecimalFormat("#.##%");

System.out.println(format4.format(12.345));  // 1234.5%

四、MessageFormat

MessageFormat提供了以语言环境无关的生成连接消息的方式。

常用MessageFormat的静态方法format,该方法接收一个字符串的模式和一组对象(对象数组),按照模式形式将格式化的对象插入到模式中,然后返回字符串结果。

  1. setFormatByArgumentIndex(int argumentIndex, Format newFormat)//

  2. setFormats(Format[] newFormats)

  3. setFormat(int formatElementIndex, Format newFormat)

MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");

double[] filelimits = { 0, 1, 2 };

String[] filepart = { "no files", "one file", "{0,number} files" };

ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);

form.setFormatByArgumentIndex(0, fileform);

int fileCount = 1273;

String diskName = "MyDisk";

Object[] testArgs = { new Long(fileCount), diskName };

System.out.println(form.format(testArgs));

//输出:The disk "MyDisk" contains 1,273 files.

五、String类中的format方法

String类中的format方法 https://blog.csdn.net/LC_Liangchao/article/details/121794093

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值