2017-06-07 21 views
0

我試圖從用戶解析輸入字符串,並將其轉換成浮動Android的 - 如何正確地解析字符串漂浮(價格數字格式:整數,小數或兩者)

String[] inputs = { 
     "100", 
      "100.0", 
      "100.00", 
      "100.00000", 
      "100.1", 
      "100.10", 
      "100.11", 
      "100.111", 
      "1.0", 
      "0.1", 
      "0.10", 
      "0.1000", 
      "0.111", 
      "100,00", 
      "1,000.15" 
    }; 

    for (String input : inputs) { 
     try { 
      input = input.replace(",", "."); 
      Float value = Float.valueOf(input); 

      if (value == 0F) { 
       Log.d("APP", "--> NOPE: " + value); 
       continue; 
      } 

      String oldInput = input; 

      DecimalFormat dc = new DecimalFormat(value > 1F ? "#.00" : "#0.00"); 
      input = dc.format(value); 
      value = Float.valueOf(input); 

      Log.d("APP", oldInput + " -> " + value); 
     } 
     catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 
    } 

其中給出我下面的輸出:

100   -> 100.0 
100.0  -> 100.0 
100.00  -> 100.0 
100.0000 -> 100.0 
100.1  -> 100.1 
100.10  -> 100.1 
100.11  -> 100.11 
100.111  -> 100.11 
1.0   -> 1.0 
0.1   -> 0.1 
0.10  -> 0.1 
0.1000  -> 0.1 
0.111  -> 0.11 
100,00  -> 100.0 

當我輸入字符串像這樣出現的問題:

1,000.25 

A java.lang.NumberFormatException: multiple points拋出異常

  1. 1,000.25有效輸入? (貨幣來自美國?)
  2. 是否有更好或更優化的解析輸入的方式?
+0

','的格式,使用替代 –

+0

1,000.25刪除替換字符後1.000.25這不是一個有效的float, 如果 '' 只是你可以改變'input = input.replace(「,」,「。」);'to'input = input.replaceAll(「,」,「」);' –

回答

0

試試這個:

float result = Float.parseFloat(string.replaceAll(",", ""));