Я вижу странное поведение, когда я использую DecimalFormatter Java с разными языками. Если число - это двойное число со значением 1,255,000,000 (в отладчике оно отображается как 1.255E9), я передаю его в DecimalFormatter с помощью Locale.Java DecimalFormatter - различное поведение между Locale DE и Locale US
Если Locale установлен в de | DE, он преобразует число в 1.255E13.
Если Locale установлен в en | US, он преобразует число (правильно) в 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();
** EDIT для большей ясности **
Строки получения передается на стороне сервера код точно так, как я изложил его выше, «1.255E9 ». На странице JSP, я просто делаю HTML как
<input type="hidden" name="number" value="<%=price%>">
Можете ли вы разместить небольшой воспроизводимый пример? –
Какой метод «DecimalFormatter» вы используете? Я думаю, что я ожидал бы «ParseException» или «1.255», в зависимости от метода, потому что в DE «,» является десятичной точкой, и вы не ожидаете двух десятичных точек в числе. (для меня «NumberFormat.getInstance» (новый язык («DE»)). Parse («1,255,000,000») 'возвращает' 1.255', как и ожидалось с '',' == NumberFormat.getInstance (новый локаль (" DE ")). getDecimalFormatSymbols(). getDecimalSeparator()'.) – Jeremy