Java之数字格式化输出小结

在控制台输出时基于格式考虑需要对相关数字的显示方式进行限定,比如对其设置整体显示宽度,小数点后保留几位数,是否按照千位进行逗号隔开等。这里小结两个途径。

1. 使用“System.out.format”

“format”方法与“printf”方法基本效果都一样,都可以是向控制台输出内容,但“format”方法可以进行一定的格式修饰。

格式占位符:“%d”表示一个整数;“%f”表示一个浮点数。

在“%”和“d”(或“f”)中间可以指定对齐方式(减号是左对齐)、是否需要千分位分隔符(逗号)、是否制定宽度(整型长度)、小数点后保留几位等设置。

让我们用[源码]理解:

public class Demo11 {
    
    
    public static void main(String[] args){
    
    
        double num = 698756886.825;
        System.out.printf("%7.2f\n",num);
        //System.out.printf("%-f",num);//注意:这样写会导致异常报错!!!
        System.out.format("%-7.2f\n",num);
        //System.out.format("%-f",num); //注意:这样写会导致异常报错!!!
        System.out.format("%-,7.2f",num);//千分位分隔符
    }
}

输出结果:
在这里插入图片描述
理解其功能:

System.out.format("%-,7.2f",num);//千分位分隔符

代码中减号(“-”)表示左对齐;逗号(“,”)表示需要千分位分隔;7表示整体占位长度;“.2”表示小数点后保留两位。

注意为什么直接写“-f”会出现异常呢?

有待商讨!欢迎读者在评论区谈谈自己的想法~

2. DecimalFormat类

可以使用 java.test.DecimalFormat 类来控制前零和后零分组(千位)分隔符小数点位数限制的显示。

DecimalFormat类理解

API文档的解释:
在这里插入图片描述

  • 是 NumberFormat 的一个子类,用于格式化十进制数字。
  • DecimalFormat 类包含一个模式一组符号,常用符号的说明如下图所示。
    在这里插入图片描述
    用一段代码理解说明:
//第一步,导入包
import java.text.DecimalFormat;
public class Demo12 {
    
    
    public static void main(String[] args){
    
    
        //第二步,准备DecimalFormat类,并设置好样式
        DecimalFormat df = new DecimalFormat("$###,###.###");
        double num = 12345.6789;
        //第三步,得到格式化后的字符串
        String output = df.format(num);
        System.out.println(output);
    }
}

输出结果:
在这里插入图片描述
格式控制代码中,逗号表示使用千分位分隔符;实心点后面的“#”数量表示小数点后留几位;最前面的“$”表示美元符。

如果把上面代码样式中的“#”改为“0”,会输出什么样式呢?涌现代码测试下。

//第一步,导入包
import java.text.DecimalFormat;
public class Demo12 {
    
    
    public static void main(String[] args){
    
    
        //第二步,准备DecimalFormat类,并设置好样式
        DecimalFormat df = new DecimalFormat("$000,000.00000");
        double num = 12345.6789;
        //第三步,得到格式化后的字符串
        String output = df.format(num);
        System.out.println(output);
    }
}

输出结果:
在这里插入图片描述
实现了前后补“0”的效果

综合来看,DecimalFormat类的使用可能稍微显麻烦,但是它不是基于控制台,因此后续再不同平台迁移时灵活性更好,在解决实际问题时使用非常普遍。

习题:

任务描述:

完成薪资转换工具,具体如下:当用户输入月薪时,计算出对应的日薪(每月工作日22天)和年薪(1年13薪),并进行输出显示,如下图:
在这里插入图片描述

问题分析

分析任务描述,需要根据用户输入的月薪计算日薪和年薪并进行输出;需要准备三个double类型的变量分别存储月薪、日薪和年薪。

设计流程

  1. 接收用户输入月薪;
  2. 进行业务处理;
  3. 按要求格式化输出结果。

实现功能[代码]

import java.text.DecimalFormat;
import java.util.Scanner;

/**
 * 薪资转换工具
 */
public class Demo13 {
    
    
    public static void main(String[] args){
    
    
        //提示用户输入月薪并接收
        System.out.println("******薪资转换工具v1.0******");
        System.out.print("请输入月薪(人民币):");
        Scanner input = new Scanner(System.in);
        double salary = input.nextDouble();//输入月薪
        //进行业务处理
        double dateSalary = salary / 22;//每月22个工作日
        double yearSalary = salary * 13;//一年发放13月薪资
        //格式化输出
        //方法一(比较复杂)
        /*DecimalFormat df = new DecimalFormat("¥###.##");
        System.out.println("您的日薪:" + df.format(dateSalary));
        DecimalFormat df_1 = new DecimalFormat("¥000,000.00");
        System.out.println("您的年薪:" + df_1.format(yearSalary));*/
        //方法二
        DecimalFormat df = new DecimalFormat("¥###,###.00");
        System.out.format("您的日薪:%-10.2f\n",dateSalary);
        System.out.println("您的年薪:" + df.format(yearSalary));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46312449/article/details/114298093