一、简介

——在java.text包中
——作用:对数据格式化输出
——java对文字,数字的格式化,是有一个公共的父类的Format。
①NumberFormat和DecimalFormat都是它的子类关于数字的
②DateFormat和SimpleDateFormat也是它的子类关于文字的
当然今天只说NumberFormat和DecimalFormat。相信我,当你搞懂这两个以后,那么DateFormat和SimpleDateFormat也是肯定会的。

首先,要特别注意的是 NumberFormat和DecimalFormat是线程不安全的。 这意味你如果同时有多个线程操作一个format实例对象,会出现意想不到的结果。
解决方法有两个:

1、为每个线程都创建一个 format实例,通过ThreadLocal 来给每个线程都产生一个本地实例。
2、进行外部同步,这个就可以通过关键词 synchronized来进行同步
上面的这两种方法呢,
第一种方法 比较占用内存多,但是速度快,效率高。并发。第二种方法 占用内存少,效率低,耗费时间长,毕竟要排队嘛,串行。具体取舍,看项目的情况。
——DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
——在别的文章中我们讲了包的导入有两种方式,使用import语句以及直接指明含该类的包。当我们只需要格式一个或较少数据时,可以用第二种方式。数据较多时,用第一种。

二、代码演示

class Chapter_02_Son {
	 
	 //学生信息类
	 String name;
	 int ID;
	 int classId;
	 //重写构造方法,初始化类成员变量
	 Chapter_02_Son(){
		 this("", 0, 0);
	 }
	 Chapter_02_Son(String name, int ID,int classId ){
		  = name;
		 this.ID = ID;
		 this.classId = classId;
	 }
	 //重写toString(),格式化输出学生信息,没有导入包java.text,直接在程序中指明含类的包	 
	public String toString() {
	   return "name: " + name + 
			   " ID: " + new java.text.DecimalFormat("00000").format(ID) +
			   " classId: " + new java.text.DecimalFormat("00").format(classId) ;
			    
	}
public static void main(String[] args) {
	
	 Chapter_02_Son student1;
	 student1 = new  Chapter_02_Son("zhangsan", 20212, 5);
	 System.out.println(student1.toString());
}

输出结果:
name: zhangsan ID: 20212 classId: 05

我们给classId的值是5,输出时是05,说明按照我们重写的toString()的格式输出了。

三、格式符号

java 的 Decimal 类型是啥 java decimalformat_java

四、常见格式化方式

我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子。下面是一个例子:

importjava.text.DecimalFormat;
  
publicclassTestNumberFormat{
  
  public static void main(String[]args){
 	    double pi=3.1415927;
       //取一位正数
       System.out.println(new DecimalFormat("0").format(pi));
       //取一位整数,两位小数
       System.out.println(new DecimalFormat("0.00").format(pi));
       //取两位整数,三位小数,整数不足部分以0补足
       System.out.println(new DecimalFormat("00.000").format(pi));
       //取所有整数部分
       System.out.println(new DecimalFormat("#").format(pi));
       //以百分比方式计数,并取两位小数
       System.out.println(new DecimalFormat("#.##%").format(pi));

       long c=299792458;//光速
       //显示为科学计数法,并取五位小数
       System.out.println(new DecimalFormat("#.#####E0").format(c));
       //显示为两位整数的科学计数法,并取四位小数
       System.out.println(new DecimalFormat("00.####E0").format(c));
       //每三位以逗号进行分隔
       System.out.println(new DecimalFormat(",###").format(c));
       //将格式嵌入文本
       System.out.println(new DecimalFormat("光速大小为每秒,###米").format(c));
}

输出结果:
3
3.14
03.142
3
314.16%
2.99792E8
29.9792E7
299,792,458
光速大小为每秒299,792,458米