2017-05-14 22 views
1

갑자기 나는이 didnt가되기 전에 오류가자바 더블

예 :

Double double1 = 0.12; 
String string1 = String.format("%.2f", double1) 

System.out.println(string1); 

출력 : 다음

0,12 

내가이

double double2 = Double.parseDouble(string1); 

오류

java.lang.NumberFormatException: For input string: "0,12" 

나는 ","(쉼표)로 인해 오는 것을 확신합니다. 우스운 일은 2 일 전에 아무것도 잘 작동하고 있었고 나는 변화를 전혀하지 못했다는 것입니다.

변경 사항이나 변경 사항을 알고 있습니까?

+0

'string1'은'0.12'입니다. 어떻게'0,12'를 얻었습니까? –

+2

응용 프로그램 또는 OS의 기본 로켈을 변경했습니다. parseDouble()에는 항상 점이 필요합니다. String.format()는 로캘 별 소수 구분 기호를 사용합니다. 당신은 후자에 의해 생성 된 것을 파싱하기 위해 첫 번째 것을 사용해서는 안됩니다. –

답변

4

Double#parseDouble의 형식은 Double#toString으로 바뀝니다.

String#format, 소수점이있는 숫자의 서식을 지정하라는 메시지가 표시되면 현재 로캘로 출력하지만 Double#toString은 표시되지 않습니다.

String#format의 출력을 구문 분석하려면 Scanner이이를 수행 할 수 있다고 생각합니다. 개인적으로는 구문 분석 할 숫자의 현지화는 피하고 Double#toString을 사용하여 서식을 지정하거나 서식을 지정할 때 Locale.ROOT을 명시 적으로 전달합니다.

+0

"무슨 일이 있었는지 아십니까?"- OS의 기본 로케일이 변경되었습니다 (예 : JB Nizet). 이 답변에서도 명시 적으로 언급 될 수 있었지만 암묵적으로 그런 식으로 말한 것 같습니다. – eis

+0

그게 바로 Locale.UK를 사용하는 코드의 다른 곳에서 응용 프로그램을 변경했을 수도 있습니다! 이제 Locale.US를 추가하고 이제는 잘 작동합니다! –