Logo

郎哥编程

数值格式化输出

2019-12-15 927

在实际编程中,对数值进行格式化处理是常用的操作。虽然可以利用前面介绍的printf()和String类的format()方法,进行数值的格式化处理,但这些方法主要还是对字符串进行格式化处理,对数值的格式化处理还不能满足实际要求。

Java API类库提供了DecimalFormat类用于数值的格式化处理,主要是格式化十进制数值,它可以将数值格式化为整数、浮点数、科学计数法、百分数等。同时也可以为数值加上单位和控制数值的精度。

DecimalFormat类在格式化数字时,会使用由一些预定义字符构成的模式串,使数字按照一定的规则进行匹配。下表给出了模式串常用的预定义字符及含义。

image.png


模式串是一个字符串,字符串由上表预定义的字符组成。实例化DecimalFormat对象时,需要传入这个字符串。

例如模式串:###.##

在上面的模式串中,包含两个预定义字符,一个字符是“#”,一个字符是“.”。查上表可知字符“#”表示一位阿拉伯数字,“.”表示小数分隔符。由此可以得出模式串“###.##”的输出格式是3位整数和2位小数,如:129.56、300.12等。

案例1:输出固定位数的整数和小数,例如取2位整数、保留3位小数等。

在eclipse下新建项目PBaseUnit16,创建包unit,在unit包下创建Java类DecimalFormatSample1。代码如下:

/** 
* @Title: DecimalFormatSample1.java 
* @Package unit 
* @Description: Java基础知识课程案例 
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.text.DecimalFormat;
 
/** 
* @ClassName: DecimalFormatSample1 
* @Description: 数值处理与运算(数值格式化输出)案例1
* @author 编程训练营
* @date 
* 
*/
 
public class DecimalFormatSample1 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法 
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       double  dValue = 129.563291;
       // 取3位整数和2位小数
       DecimalFormat  dcimalFormat = new DecimalFormat("###.##");
       String strFormat =  dcimalFormat.format(dValue);
       System.out.println(strFormat);
 
    }
 
}

程序结构分析

实例化DecimalFormat对象时,传入模式串“###.##”,该模式串的输出格式是3位整数和2位小数。然后调用对象的format()方法对传入的数值进行格式化处理,处理结果以String对象返回。

程序执行结果如下图所示:

image.png

数值用科学计数法表示

例如模式串:#.##E00

在上面的模式串中,包含四个预定义字符,一个字符是“#”,一个字符是“.”,一个字符是“E”,一个字符是“0”。查上表可知字符“#”表示一位阿拉伯数字,“.”表示小数分隔符,“E” 表示分割科学技术法中的尾数和指数,“0”表示一位阿拉伯数字。

由此可以得出模式串“#.##E00”的输出格式是数值的科学计数法,格式为整数1位,小数2位,指数3位。如:1.29E002等。

案例2:数值用科学计数法表示,要求整数1位,小数2位,指数2位。

在PBaseUnit16项目unit包下创建Java类DecimalFormatSample2。代码如下:

/** 
* @Title: DecimalFormatSample2.java 
* @Package unit 
* @Description: Java基础知识课程案例  
* @author 编程训练营  
* @date 
* @version V1.0 
*/ 
 
package unit;
 
import java.text.DecimalFormat;
 
/** 
* @ClassName: DecimalFormatSample2 
* @Description: 数值处理与运算(数值格式化输出)案例2 
* @author 编程训练营 
* @date 
* 
*/
 
public class DecimalFormatSample2 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法  
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       double  dValue = 129.563291;
       // 科学计数法
       DecimalFormat  dcimalFormat1 = new DecimalFormat("#.##E000");
       String strFormat1 =  dcimalFormat1.format(dValue);
       System.out.println(strFormat1);
    }
 
}

程序结构分析

实例化DecimalFormat对象时,传入模式串“#.##E000”,该模式串的输出格式是科学计数法。调用对象的format()方法对传入的数值进行格式化处理,处理结果以String对象返回。

程序执行结果如下图所示:

image.png

用逗号分隔数值

例如模式串:,###

在上面的模式串中,包含两个预定义字符,一个字符是“,”,一个字符是“#”,”“,” 表示分组分隔符,例如数值每三位一组。

由此可以得出模式串“,###”的输出格式是数值每三位一组。如:129,678,320等。

案例3:用逗号分隔数值,每三位一组。

在PBaseUnit16项目unit包下创建Java类DecimalFormatSample3。代码如下:

/** 
* @Title: DecimalFormatSample3.java 
* @Package unit 
* @Description: Java基础知识课程案例
* @author 编程训练营 
* @date  
* @version V1.0 
*/ 
 
package unit;
 
import java.text.DecimalFormat;
 
/** 
* @ClassName: DecimalFormatSample3 
* @Description: 数值处理与运算(数值格式化输出)案例3
* @author 编程训练营
* @date 
* 
*/
 
public class DecimalFormatSample3 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法   
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       double  dValue = 129563291;
       // 数值分组,每三位一组
       DecimalFormat  dcimalFormat1 = new DecimalFormat(",###");
       String strFormat1 =  dcimalFormat1.format(dValue);
       System.out.println(strFormat1);
    }
 
}

程序结构分析

实例化DecimalFormat对象时,传入模式串“,###”,该模式串的输出格式是数值每三位一组。然后调用对象的format()方法对传入的数值进行格式化处理。

程序执行结果如下图所示:

image.png

 


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论