首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 數字格式化:三位分隔符 (1,000,000) 一行代碼實現

     編輯:Java 相關知識

核心 API


// 默認三位分隔 (依賴 Locale)
DecimalFormat formatter = new DecimalFormat();
String result = formatter.format(1000000); // "1,000,000" (US Locale) / "1.000.000" (German Locale)

// 顯式指定分組大小 (每 N 位分隔)
DecimalFormat df = new DecimalFormat();
df.setGroupingSize(3); // 默認即 3
df.setGroupingUsed(true);
String s = df.format(value);

完整可運行示例


import java.text.DecimalFormat;
import java.util.Locale;

public class NumberFormatDemo {
    public static void main(String[] args) {
        long value = 1_000_000_000L;

        // 1. 默認 Locale (系統環境)
        System.out.println("默認: " + new DecimalFormat().format(value));

        // 2. 指定 Locale (強制英文分隔符)
        System.out.println("US: " + NumberFormat.getNumberInstance(Locale.US).format(value));
        System.out.println("DE: " + NumberFormat.getNumberInstance(Locale.GERMANY).format(value));
        System.out.println("CN: " + NumberFormat.getNumberInstance(Locale.CHINA).format(value));

        // 3. 自定義模式 (最靈活)
        DecimalFormat custom = new DecimalFormat("#,###"); // 整數分組
        System.out.println("自定義: " + custom.format(value));

        // 4. 含小數
        DecimalFormat withDecimal = new DecimalFormat("#,##0.00");
        System.out.println("兩位小數: " + withDecimal.format(1234567.891)); // "1,234,567.89"

        // 5. 科學計數法
        DecimalFormat sci = new DecimalFormat("0.###E0");
        System.out.println("科學記數: " + sci.format(value)); // "1.000E9"
    }
}

關鍵模式字符速查

符號含義示例 (1234.5)
0強制數字位 (不足補 0)0000.00 → 1234.50
#可選數字位 (不補 0)####.## → 1234.5
,分組分隔符 (按 Locale 顯示為 , . 空格等)#,### → 1,234
.小數點 (按 Locale 顯示為 . 或 ,)#.00 → 1234.50
E科學計數法0.00E0 → 1.23E3
%百分比 (值乘 100 並加 %)#% → 123450%
¤貨幣符號¤#,##0.00 → $1,234.50

進階:自定義分組大小 (如印度計數制 1,00,00,000)


// 標準分組: 3 位 (1,000,000,000)
// 印度分組: 3,2,2... (1,00,00,00,000)
DecimalFormat indian = new DecimalFormat("#,##,##0");
indian.setGroupingSize(3); // 主分組
// 注意: DecimalFormat 僅支援固定分組大小,無法直接實現 3-2-2 變長分組
// 變長分組需手工字符串處理或使用 ICU4J

線程安全警示

DecimalFormat / NumberFormat 非線程安全。

  • 方案 1:方法局部變量 `new DecimalFormat()` (推薦,無鎖開銷)
  • 方案 2:ThreadLocal<DecimalFormat> 緩存實例
  • 方案 3:synchronized 包裝 (性能差)

現代替代:Java 12+ CompactNumberFormat


NumberFormat compact = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
compact.setMaximumFractionDigits(1);
System.out.println(compact.format(1_000_000));    // "1M"
System.out.println(compact.format(1_234_567));    // "1.2M"
System.out.println(compact.format(1_000_000_000)); // "1B"

總結

Java 數字分組格式化核心是 DecimalFormat / NumberFormat.getNumberInstance(Locale)。一行代碼 即可實現標準三位分隔:NumberFormat.getNumberInstance(Locale.US).format(value)。關鍵注意:Locale 決定分隔符樣式、DecimalFormat 非線程安全、自定義模式靈活控制小數/科學記數/貨幣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved