首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 字串轉數字:NumberFormat 處理逗號小數點(法文/歐洲格式 37,78584)

     編輯:程式設計綜合問答

問題:Double.parseDouble("37,78584") 拋出 NumberFormatException。原因:字串使用**逗號作為小數點分隔符**(法文/德文/歐洲格式),而非英文預設的點號。

正確解法:指定 Locale 使用 NumberFormat


String s = "37,78584";
NumberFormat format = NumberFormat.getNumberInstance(Locale.FRENCH); // 或 Locale.GERMAN, Locale.ITALY 等
Number number = format.parse(s);
double d = number.doubleValue(); // 37.78584
System.out.println(d);

關鍵類別與方法

類別/方法用途
NumberFormat.getNumberInstance(Locale)取得指定地區的數字格式化器(含分隔符規則)
format.parse(String)解析字串為 Number 物件
number.doubleValue() / intValue() / longValue()轉為基本型別
Locale.FRENCH, Locale.GERMAN, Locale.ITALY, Locale.KOREA 等預設使用逗號小數點的地區

完整工具方法


public static Double parseLocalizedDouble(String s, Locale locale) {
    if (s == null || s.trim().isEmpty()) return null;
    try {
        NumberFormat format = NumberFormat.getNumberInstance(locale);
        Number number = format.parse(s.trim());
        return number.doubleValue();
    } catch (ParseException e) {
        return null;
    }
}

// 使用
Double d1 = parseLocalizedDouble("37,78584", Locale.FRENCH);     // 37.78584
Double d2 = parseLocalizedDouble("1.234,56", Locale.GERMAN);     // 1234.56 (德文千分位用點)
Double d3 = parseLocalizedDouble("1,234.56", Locale.US);         // 1234.56 (美式)

進階:處理貨幣、百分比、科學記號


// 貨幣格式
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.FRENCH);
Number price = currencyFormat.parse("37,78 €"); // 37.78

// 百分比格式
NumberFormat percentFormat = NumberFormat.getPercentInstance(Locale.FRENCH);
Number rate = percentFormat.parse("50,5 %"); // 0.505

常見 Locale 小數點/千分位對照

Locale小數點千分位範例
US / UK.,1,234.56
FRENCH / GERMAN / ITALY / SPAIN / KOREA,.1.234,56
CHINESE.,1,234.56
JAPAN.,1,234.56

最佳實務

  1. ✅ **明確指定 Locale**,不要依賴預設 Locale.getDefault()(使用者可隨時更改系統語言)。
  2. ✅ 使用者輸入介面**顯示當地格式**,但**儲存/傳輸統一用標準格式**(點號小數點、無千分位)。
  3. ✅ 解析失敗時回傳 null 或拋出自訂異常,不要讓 ParseException 外洩。

掌握 NumberFormat + Locale,輕鬆解決全球化數字解析難題。

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