2016-08-24 2 views
-1

이 오류는 아마도 다른 시스템 로캘로 인해 발생합니다. 소수점 구분 기호로 DOT를 사용합니다.float를 구문 분석하는 동안 NumberFormatException

응용 프로그램이 시작될 때 기본 로케일을 설정하려고했지만 동일한 예외가 발생합니다.

Locale.setDefault(Locale.US); 

스택 트레이스는 : 코드가 Float.parseFloat을 사용하고 같은

Caused by: java.lang.NumberFormatException: For input string: "6,2" at 
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at 
sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122) at 
java.lang.Float.parseFloat(Float.java:451) 
+4

'내가 소수점 separator' ....로 DOT를 사용'는 NumberFormatException : 입력 문자열 : "6,2"'. 뭔가 소리가 나지 않습니다. – SomeJavaGuy

+0

나는 미국이 도트를 사용한다고 확신한다. –

+1

도트 대신 쉼표 (예 : 독일어)를 사용하는 로케일을 설정해야한다. 그러나 기본 로케일 (모든 종류의 효과가 적용됩니다)을 설정하는 것보다 NumberFormatter 인스턴스에 설정하는 것이 좋습니다. – Thilo

답변

3

것 같습니다. 로케일 설정은 사용하지 않습니다. 워드 프로세서에서 :

는 Float 클래스의 valueOf 방법에 의해 수행으로 지정된 String가 나타내는 값으로 초기화 된 새로운 float 값을 돌려줍니다.

그리고 valueOf 상세한 문법을 ​​가지고 있으며,이 포함되어

가 현지화 된 부동 소수점 값의 문자열 표현, NumberFormat의 서브 클래스를 해석하기.

기본적으로 기본 로캘은 관련성이 없습니다. "6,2"를 구문 분석하려면 소수점 구분 기호로 쉼표를 사용하는 로케일로 NumberFormat을 사용해야합니다. 내가 마지막으로 사용했던 어떤

+0

주어진 객체를 숫자로 포맷 할 수 없습니다. 이것은 내 접근 방식입니다 : 'NumberFormat format = NumberFormat.getInstance (Locale.FRANCE); ' 'course.setCourseGrade (Float.parseFloat (format.format (courseGrade))); – pror21

+1

@ pror21 그래서 'NumberFormat'을 사용하여'float'을'String'으로 변환 한 다음 로켈없이'float'으로 다시 파싱합니까? 뭔가 이상하게 여기는 것이 있습니까? –

+0

@ pror21 : 당신이 정말로 이루고자하는 것을 설명하지 않았습니다. 질문에있는 행동을 설명했지만 위의 귀하의 의견은 매우 밀접하게 관련이없는 것 같습니다 ... –

0

는 울부 짖는이 코드입니다 :

DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
    symbols.setDecimalSeparator('.'); 
    DecimalFormat format = new DecimalFormat("0.#"); 
    format.setDecimalFormatSymbols(symbols); 

    try { 
     course.setCourseGrade(format.parse(courseGrade).floatValue()); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
관련 문제