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

Java 數字格式化完全指南:DecimalFormat 實戰詳解

     編輯:Java 相關知識

為什麼需要 DecimalFormat?

貨幣顯示、科學計數、百分比、分組分隔符……數字呈現場景多變。java.text.DecimalFormat 以模式字串靈活定義格式,是 Java 處理數字展示的利器。

核心模式符號

符號含義示例
0數字佔位,不足補 000.00 → 03.14
#數字佔位,不足不補##.## → 3.14
.小數點(按 Locale 解析)
,分組分隔符(千分位),### → 1,000
E科學計數法分隔符#.###E0 → 1.23E3
%百分比(乘 100 並加 %)#% → 123%
';'分隔正負數格式#.##;(#.##)

常用場景代碼速查

double pi = 3.1415927;
long lightSpeed = 299792458L;

// 基礎格式化
new DecimalFormat("0").format(pi);           // "3"
new DecimalFormat("0.00").format(pi);        // "3.14"
new DecimalFormat("00.000").format(pi);      // "03.142"
new DecimalFormat("#").format(pi);           // "3"
new DecimalFormat("#.##%").format(pi);       // "314.16%"

// 科學計數法
new DecimalFormat("#.#####E0").format(lightSpeed);  // "2.99792E8"
new DecimalFormat("00.####E0").format(lightSpeed);  // "29.9792E7"

// 千分位分組
new DecimalFormat(",###").format(lightSpeed);       // "299,792,458"

// 嵌入文本
new DecimalFormat("光速大小為每秒 ,### 米。").format(lightSpeed);
// "光速大小為每秒 299,792,458 米。"

進階技巧

Locale 敏感格式化

不同地區小數點、分組符號不同(如德語用逗號作小數點)。使用 DecimalFormatSymbols 顯式控制:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat("#,###.00", symbols);

四捨五入模式

預設 RoundingMode.HALF_EVEN(銀行家算法)。財務場景常需 HALF_UP:

df.setRoundingMode(RoundingMode.HALF_UP);

線程安全注意

DecimalFormat 非線程安全。多線程環境下:

  • 使用 ThreadLocal 緩存實例
  • 或每次創建新實例(開銷極小)
  • 或改用 NumberFormat.getInstance() 獲取不可變格式化器

總結

掌握 0/# 佔位符組合、科學計數、分組分隔、百分比等核心模式,即可覆蓋 95% 數字展示需求。記住:格式化僅影響展示,不改變數值本身;涉及精度計算請用 BigDecimal。

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