markdown-it
demo
Delete
Submit
clear
permalink
這是一個非常常見的需求,也是 `DecimalFormat` 類別設計的重點之一。要實現「有小數時印出小數,沒有小數時只印出整數,且不帶小數點或尾隨零」,您只需要在模式中使用 **`#` (井號)** 來表示小數部分。 ### 關鍵模式:`#,##0.##` 讓我們分解這個模式: 1. **`#,##0` (小數點左邊):** * `#` 和 `,` 用於千位分隔符,如果數字很大,會自動添加逗號。 * `0` 確保至少有一位整數(例如,`0.5` 會被格式化為 `.5`,但使用 `0` 則為 `0.5`)。 2. **`.` (小數點):** 分隔符。 3. **`##` (小數點右邊):** * **關鍵點!** 使用 **`#`** 表示這是一位**可選的數字**。如果實際數值在該位置是零,或者該位之後所有數字都是零,則 **`#`** 所代表的數字、以及它前面的小數點,都會被**省略**。 ### 範例程式碼 ```java import java.text.DecimalFormat; public class OptionalDecimalDemo { public static void main(String[] args) { // 使用模式:#.## (整數部分使用 # 讓 0.5 輸出為 .5,但我們通常會使用 0.) // 更通用的模式是 #,##0.##,可以處理整數零值和千位分隔符。 DecimalFormat formatter = new DecimalFormat("#,##0.##"); // 測試一:精確的整數 double value1 = 1234.0; String result1 = formatter.format(value1); System.out.println(value1 + " => " + result1); // 輸出: 1234.0 => 1,234 (沒有小數點) // 測試二:帶有小數點 double value2 = 1234.567; String result2 = formatter.format(value2); System.out.println(value2 + " => " + result2); // 輸出: 1234.567 => 1,234.57 (只保留兩位,並四捨五入) // 測試三:小數部分有尾隨零 double value3 = 100.20; String result3 = formatter.format(value3); System.out.println(value3 + " => " + result3); // 輸出: 100.2 => 100.2 (尾隨的零被移除) // 測試四:零值 double value4 = 0.0; String result4 = formatter.format(value4); System.out.println(value4 + " => " + result4); // 輸出: 0.0 => 0 (沒有小數點) // 測試五:小數少於模式設定位數 double value5 = 5.1; String result5 = formatter.format(value5); System.out.println(value5 + " => " + result5); // 輸出: 5.1 => 5.1 } } ``` ### 🔹 模式詳解: | 符號 | 位置 | 目的 | | :--- | :--- | :--- | | **`#`** | 整數/小數部分 | **表示數字,但在數組邊界處可省略。** 在小數點右側,這意味著它只在有實際非零小數位時才顯示。 | | **`0`** | 整數/小數部分 | **表示數字,即使為零也會強制顯示。** 在小數點右側,這會強制顯示該位的小數,即使是零。 | | **`#,##0.##`** | 組合 | 透過將小數點右側全部設為 `#`,您有效地告訴格式化工具:「如果小數部分的值為零,請省略小數點及其後的所有內容;如果小數部分不為零,則最多顯示兩位。」 如果您希望最多顯示四位小數,模式就變成:`#,##0.####`。
html
source
debug
Fork me on GitHub