Вы разбираете строку, которая составляет «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"));
Привет Кэцян, Спасибо большое за подробное объяснение. Любые мысли/указатели на то, как разрешить это, будут полезны. – askdctm
@askdctm см. Мое обновление. –
Привет Keqiang. Подробности, как показано ниже: вход всегда будет строковым вводом [т.е., 1,000.00]. У нас есть веб-сайт и на каждой странице [say en_gb], этот ввод используется для отображения в формате [т. Е. EUR 1000.00m]. Но на французской странице из-за этой проблемы она приближается к [т. Е. EUR 1,00 м]. Нам нужны эти данные, чтобы они отображались так же, как и на других страницах [say en_gb]. – askdctm