天天看點

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:

在控制台輸出時基于格式考慮需要對相關數字的顯示方式進行限定,比如對其設定整體顯示寬度,小數點後保留幾位數,是否按照千位進行逗号隔開等。這裡小結兩個途徑。

數字格式化輸出

  • 1. 使用“System.out.format”
  • 2. DecimalFormat類
    • DecimalFormat類了解
  • 習題:
    • 任務描述:
    • 問題分析
    • 設計流程
    • 實作功能[代碼]

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);//千分位分隔符
    }
}
           

輸出結果:

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:

了解其功能:

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

代碼中減号(“-”)表示左對齊;逗号(“,”)表示需要千分位分隔;7表示整體占位長度;“.2”表示小數點後保留兩位。

注意為什麼直接寫“-f”會出現異常呢?

有待商讨!歡迎讀者在評論區談談自己的想法~

2. DecimalFormat類

可以使用 java.test.DecimalFormat 類來控制前零和後零、分組(千位)分隔符和小數點位數限制的顯示。

DecimalFormat類了解

API文檔的解釋:

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:
  • 是 NumberFormat 的一個子類,用于格式化十進制數字。
  • DecimalFormat 類包含一個模式和一組符号,常用符号的說明如下圖所示。
    Java之數字格式化輸出小結1. 使用“System.out.format”2. 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);
    }
}
           

輸出結果:

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:

格式控制代碼中,逗号表示使用千分位分隔符;實心點後面的“#”數量表示小數點後留幾位;最前面的“$”表示美元符。

如果把上面代碼樣式中的“#”改為“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);
    }
}
           

輸出結果:

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:

實作了前後補“0”的效果。

綜合來看,DecimalFormat類的使用可能稍微顯麻煩,但是它不是基于控制台,是以後續再不同平台遷移時靈活性更好,在解決實際問題時使用非常普遍。

習題:

任務描述:

完成薪資轉換工具,具體如下:當使用者輸入月薪時,計算出對應的日薪(每月工作日22天)和年薪(1年13薪),并進行輸出顯示,如下圖:

Java之數字格式化輸出小結1. 使用“System.out.format”2. DecimalFormat類習題:

問題分析

分析任務描述,需要根據使用者輸入的月薪計算日薪和年薪并進行輸出;需要準備三個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));
    }
}