내가 다른 로케일로 자바의 DecimalFormatter를 사용할 때 나는 이상한 행동을보고 있어요 사이에 다른 행동. 숫자가 1,255,000,000의 값을 가진 double 인 경우 (디버거에서 1.255E9로 표시됨) Locale을 사용하여 DecimalFormatter에 전달합니다. 로케일이 해제로 설정되어있는 경우자바 DecimalFormatter - 로케일 DE 및 로케일 미국
는 | DE, 그것은 1.255E13에 수를 변환합니다. 로케일은 실내가 설정되어있는 경우
는 | 미국, 그것은 1.255E9에 수를 (제대로)로 변환합니다.
왜 독일 로케일이 잘못을하고있다?
여기 내 코드의 ...
// number comes from JSP
// usually in form of "1.255E9"
String text = request.parameter("number");
NumberFormat numFormatter = NumberFormat.getInstance(formatLocale);
DecimalFormat formatter = (DecimalFormatter)numFormatter;
formatter.applyPattern("#,###");
return formatter.parse(text.trim()).doubleValue();
** 내가 위에서 그것을 설명으로 더 명확하게하기 위해 편집 **
문자열은 서버 측 코드로 전달하기가 정확히, "1.255E9 ". JSP 페이지에, 나는 단순히 (독일 포함) 일부 유럽 국가들은 그룹화 구분 (1000 개 단위 구분)로
<input type="hidden" name="number" value="<%=price%>">
작은 재현 가능한 예를 게시 할 수 있습니까? –
'DecimalFormatter' 메서드는 무엇을 사용하고 있습니까? DE에서는 ","가 소수점이고 숫자에 두 개의 소수점이 없기 때문에 메소드에 따라'ParseException' 또는 "1.255"를 예상했을 것입니다. '이후 예상대로 (나를 위해,'NumberFormat.getInstance는 (새 로케일 ("DE는")). == NumberFormat.getInstance (새 로케일 ('DE', '("1255000000")'리턴'을 1.255' 분석 ")). getDecimalFormatSymbols는(). getDecimalSeparator()'.) – Jeremy