2016-04-14 2 views
0

В моем коде, я получаю значение локали и использовать его в приведенном ниже фрагменте кода:Numberformat.parse не работает должным образом на французском локали в Java

NumberFormat nf = NumberFormat.getInstance(locale); 
    double value = nf.parse(input).doubleValue(); 

Для EN_GB локали и fr_FR локали материалы, представленные то же самое, т.е. 1,000.00. Но «значение» - 1000.0 для en_gb locale и 1.0 для fr_fr locale.

ли попытаться найти решения в нижеприведенных сообщений: 1] NumberFormat.parse() does not work for FRANCE Locale space as thousand seperator 2] http://bugs.java.com/view_bug.do?bug_id=6318800

, но не повезло. Любые мысли/указатели на это будут действительно полезными.

ответ

2

Вы разбираете строку, которая составляет «1,000.00». Проблема в том, что во французском языке правильный формат номера 1000 составляет «1 000». Вот почему вы получили результат «1».

Простой пример:

NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE); 

double d = 1000.00; 
System.out.println(nf.format(d)); 

NumberFormat nf1 = NumberFormat.getInstance(Locale.UK); 

System.out.println(nf1.format(d)); 

Выход для Франции «1 000», тогда как для Великобритании это «1000», что означает, во Франции, они используют пространство (обратите внимание на его не то же пространство, что мы можем вместо запятой, чтобы указать тысячу.

В вашем случае, поскольку ввод представляет собой строковое представление числа, которое является «1,000.00», это означает, что оно является специфичным для локали, и вам нужно использовать правильный формат локали для его анализа. Это означает, что ваше приложение должно знать его локаль из контекста. Обычно класс NumberFormat будет использовать стандартный язык по умолчанию, в зависимости от того, где вы запускаете это приложение, и в большинстве случаев этого достаточно.

Вам нужно предоставить более подробную информацию о том, что вы пытаетесь сделать, и почему вы получаете строку в качестве ввода.

UPDATE

попробовать это:

DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(Locale.UK); 
DecimalFormat decimalFormat = new DecimalFormat(); 
decimalFormat.setDecimalFormatSymbols(dfs); 

System.out.println(decimalFormat.parse("1,000")); 
+0

Привет Кэцян, Спасибо большое за подробное объяснение. Любые мысли/указатели на то, как разрешить это, будут полезны. – askdctm

+0

@askdctm см. Мое обновление. –

+0

Привет Keqiang. Подробности, как показано ниже: вход всегда будет строковым вводом [т.е., 1,000.00]. У нас есть веб-сайт и на каждой странице [say en_gb], этот ввод используется для отображения в формате [т. Е. EUR 1000.00m]. Но на французской странице из-за этой проблемы она приближается к [т. Е. EUR 1,00 м]. Нам нужны эти данные, чтобы они отображались так же, как и на других страницах [say en_gb]. – askdctm

Смежные вопросы