2017-12-28 36 views
2

프랑스어 스타일로 서식이 지정된 숫자의 Double-Value를 얻으려고합니다. 따라서 텍스트 1 003,25는 값 (1003.25)으로 저장해야합니다.프랑스어 형식의 이중 숫자를 Java로 가져 오는 방법

public class NumberFormatTest { 
    public static void main(String[] args) throws ParseException { 
     String db = "1003.25"; 
     String manualFRA = "1 003,25"; 
     double numberDB = Double.parseDouble(db); 
     String ger = NumberFormat.getInstance(Locale.GERMAN).format(numberDB); 
     String fra = NumberFormat.getInstance(Locale.FRENCH).format(numberDB); 
     String eng = NumberFormat.getInstance(Locale.ENGLISH).format(numberDB); 

     double gerD = NumberFormat.getNumberInstance(Locale.GERMAN).parse(ger).doubleValue(); 
     double fraD = NumberFormat.getNumberInstance(Locale.FRENCH).parse(fra).doubleValue(); 
     double mfraD = NumberFormat.getNumberInstance(Locale.FRENCH).parse(manualFRA).doubleValue(); 
     double engD = NumberFormat.getNumberInstance(Locale.ENGLISH).parse(eng).doubleValue(); 

     System.out.println("From database: " + db); 

     System.out.println("\tGerman: " + ger); 
     System.out.println("\tFrench: " + fra); 
     System.out.println("\tEnglish: " + eng); 

     System.out.println("\nTo Database: "); 
     System.out.println("\tfrom German: "+ gerD); 
     System.out.println("\tfrom French: "+ fraD); 
     System.out.println("\tfrom manual French: "+ mfraD); 
     System.out.println("\tfrom Englisch: "+ engD); 
    } 
} 

From database: 1003.25 
 
\t German: 1.003,25 
 
\t French: 1 003,25 
 
\t English: 1,003.25 
 

 
To Database: 
 
\t from German: 1003.25 
 
\t from French: 1003.25 
 
\t from manual French: 1.0 
 
\t from Englisch: 1003.25

누구 아이디어, 수동 프랑스어 값이 1.0가 아닌 1003.25 이유를 가지고 있습니까? 어떻게 해결할 수 있습니까? 실제 프로그램에서이 값은 TextField의 String 형식으로 제공됩니다.

미리 도움 주셔서 감사합니다.

답변

3

프랑스어 서식이 지정된 텍스트의 공백은 일반 공백이 아닌 NO-BREAK SPACE입니다.

문자열 리터럴을 "1\u00a0003,25"으로 변경하면 작동합니다.

해당 텍스트가 외부 소스 (예 : 사용자가 공백을 공백으로 교체 할 수 있습니다 (예 :

parse(manualFRA.replace(' ', '\u00a0')) 
+0

잘 작동합니다. 때로는 대답이 너무 쉽습니다 .... :-) – Taros