Java 中浮點數的格式說明符
- 在 Java 中格式說明符及其的重要性
- Java 中浮點數的格式說明符
- 在 Java 中格式化帶/不帶精度的浮點數
-
在 Java 中使用
Formatter
類的format()
方法格式化浮點數 -
在 Java 中使用
DecimalFormat
類的format()
方法格式化浮點數
![Java 中浮點數的格式說明符](/img/Java/feature-image---java-format-specifiers-for-floating-numbers.webp)
本教程介紹 Java 中浮點數的格式說明符。它還解釋了格式說明符以及我們如何從它們那裡獲得幫助來格式化浮點數並根據我們的期望在螢幕上顯示輸出。
在 Java 中格式說明符及其的重要性
格式說明符說明將在計算機螢幕上列印哪種資料型別,有助於格式化輸出並顯示我們想要的結果。
不同的格式說明符用於格式化各種資料型別的值。例如,轉換字元 s
格式化字串,d
格式化十進位制整數,f
可以格式化浮點數等等。
我們還可以使用它們來獲取使用者的輸入。每個格式說明符都以百分比 (%
) 符號開頭;一個型別字元跟隨它。
例如,%d
表示 int
,%f
表示 float
,等等。
Java 中浮點數的格式說明符
浮點數的格式說明符處理數字的小數部分和整數部分。我們可以使用浮點數格式說明符格式化 double
、Double
、float
、Float
和 BigDecimal
資料型別的值。
下面列出了一些轉換字元,我們可以使用它們來格式化浮點數。
-
f
以特定於語言環境的十進位制格式格式化引數。這裡的精度是指小數點分隔符後的位數,該值也根據精度四捨五入。 -
a
或A
用於格式化十六進位制指數形式,不能與BigDecimal
型別一起使用。 -
e
或E
用於格式化特定於語言環境的科學記數法。格式化後,輸出包含一位數字,後跟小數分隔符和指數部分。精度決定在小數點分隔符後列印多少位。我們不能在這種型別的轉換中使用
','
標誌。 -
G
或g
可以用特定於語言環境的通用科學記數法格式化值。格式在這裡可以像f
或e
轉換。怎麼做?請看下面兩條規則。
4.1 如果舍入後的值滿足條件 10-4 =< 舍入後的值< 10precision,則使用
f
轉換對值進行格式化。
4.2 另一方面,如果舍入後的值滿足條件 10precision =< 舍入後的值 < 10-4,則使用e
轉換。
精度表示使用 e
或 f
轉換字元的小數分隔符後的位數。
使用 a
轉換字元時不能使用精度。對於 g
,精度表示我們在舍入後得到的結果幅度中的數字總數。
在 Java 中格式化帶/不帶精度的浮點數
示例程式碼(使用預設精度):
public class Main {
public static void main(String[] args) {
System.out.printf("%e %n", 11.1);
System.out.printf("%f %n", 11.1);
System.out.printf("%g %n", 11.1);
System.out.printf("%e %n", 0.000005678);
System.out.printf("%f %n", 0.000005678);
System.out.printf("%g %n", 0.000005678);
System.out.printf("%a %n", 0.000005678);
}
}
輸出:
1.110000e+01
11.100000
11.1000
5.678000e-06
0.000006
5.67800e-06
0x1.7d0b4c170d6b5p-18
示例程式碼(使用精度和寬度):
// precision is 2
System.out.printf("%.2e %n", 987654.321);
System.out.printf("%.2f %n", 987654.321);
System.out.printf("%.2g %n", 987654.321);
// width is 8 and precision is 2
System.out.printf("'%8.2e' %n", 987654.321);
System.out.printf("'%8.2f' %n", 987654.321);
System.out.printf("'%8.2g' %n", 987654.321);
輸出:
9.88e+05
987654.32
9.9e+05
'9.88e+05'
'987654.32'
' 9.9e+05'
示例程式碼(如果浮點數是 NaN
或 infinity
):
System.out.printf("%.2e %n", Double.NaN);
System.out.printf("%.2f %n", Double.POSITIVE_INFINITY);
System.out.printf("%.2g %n", Double.NEGATIVE_INFINITY);
// the ( flag encloses the -ve number inside the () parenthsis
System.out.printf("%(f %n", Double.POSITIVE_INFINITY);
System.out.printf("%(f %n", Double.NEGATIVE_INFINITY);
輸出:
NaN
Infinity
-Infinity
Infinity
(Infinity)
在 Java 中使用 Formatter
類的 format()
方法格式化浮點數
import java.util.Date;
import java.util.Formatter;
import java.util.Locale;
public class FormatFloatingPointNumb {
public static void main(String args[]) {
Formatter formatter = new Formatter();
Date date = new Date();
// print the day
System.out.println(formatter.format(Locale.US, "In the US: %tA %n", date));
}
}
輸出:
In the US: Sunday
我們使用 Java Formatter
,這是一個實用程式類,可幫助我們使用 Java 程式設計來格式化流輸出。這裡,format()
方法的語法與 printf()
相同。
對 Formatter
類使用 format()
方法的原因是,我們可以在需要時進行特定於語言環境的格式化(參見上面的程式碼示例)。
在 Java 中使用 DecimalFormat
類的 format()
方法格式化浮點數
import java.text.DecimalFormat;
import java.util.Formatter;
public class FormatFloatingPointNumb {
public static void main(String args[]) {
DecimalFormat df = new DecimalFormat("#.##");
String formatted = df.format(2.4876);
System.out.println(formatted);
}
}
輸出:
2.49
下面是對上述示例進行編碼的另一種方法。
import java.text.DecimalFormat;
import java.util.Formatter;
public class FormatFloatingPointNumb {
public static void main(String args[]) {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(2.4876));
}
}
輸出:
2.49
DecimalFormat
是 NumberFormat
的具體子類。它允許我們在任何語言環境中格式化整數 (234)、科學記數法 (1.65E5)、貨幣 ($456)、百分比 (25%) 和定點數 (12.3)。
如果我們將 #.##
傳遞給 DecimalFormat
的建構函式,它會根據小數分隔符後有多少 #
來決定小數分隔符後的數字。
另一種方法是建立一個 DecimalFormat
的物件。然後,通過傳遞一個數字來呼叫 setMaximumFractionDigits()
,以告知你想要的小數分隔符後的位數。