DecimalFormat переопределяется настройками сервера

В настоящее время я 'У меня возникли проблемы с отображением отформатированных десятичных знаков. На моей локальной машине у меня есть десятичное значение: 0,002100000000 хранится в базе данных.



@FacesConverter("bigDecimal4DigitsConverter")
public class BigDecimal4DigitsConverter extends BigDecimalConverter {

    private DecimalFormat format = new DecimalFormat("#,##0.0000");

    @Override
    protected DecimalFormat getDecimalFormat() {
        return format;
    }
}

Моя проблема на моей локальной машине, она отображает: 0,0021 - настройки США, но на другом сервере 0,0021 - настройки Франции

Это почему? Я думал, что DecimalFormat, форматирует десятичное значение независимо от локали?

Ответы на вопрос(1)

Решение Вопроса

DecimalFormat шаблон это, как говорит его имя (и Javadoc), чистый образец. В этом паттерне, представляет разделитель группировки и. представляет десятичный разделитель. Это'так же, как этоMMM представляет сокращенный месяц вSimpleDateFormat (обратите внимание, что это невозвратMMM как месяц во время форматирования, но так же, какMay или, например,Mei в зависимости от региона).

фактический символ, используемый в качестве разделителя группировки и десятичного разделителя (ифактический текст, используемый как сокращенный месяц) во время форматирования, зависит от локали, в точности как вы заметили. Это правильное поведение. Когда ты неt явно указать локаль при созданииDecimalFormat (или жеSimpleDateFormat), то языковой стандарт по умолчанию доступенLocale#getDefault() будет предполагаться. Вы должны на самом деле указатьUIViewRoot#getLocale() или, возможно, фиксированная локаль, какLocale.ENGLISH если ваше веб-приложение JSF не локализовано по непонятной причине.

Пожалуйста, обратите внимание, чтоDecimalFormat какSimpleDateFormat) не безопасен (отметьте "Синхронизация» раздел в javadoc). Вы должны создавать его не в области видимости класса / экземпляра, а в локальной области потока (т. Е. В том же блоке методов, где он вам нужен).

Я понятия не имею, чтоBigDecimalConverter вы'повторное использование,стандарт JSF один Безразлично»не иметьgetDecimalFormat() метод, чтобы я могдать более конкретный пример правильного подхода.

 czetsuya23 мая 2013 г., 11:04
Привет BalusC, еще раз спасибо за ответ. BigDecimalConverter - это просто наша реализация конвертера больших десятичных граней. Во всяком случае, я получил ваш ответ, и я совершенно не понял его. Я думаю, что я могу двигаться дальше.
 Shotgun Ninja01 апр. 2015 г., 20:49
Почему это не связано с отовсюду? Я работаю со страницами JSP и Struts, и я только что обнаружил тысячу мест в нашем коде, где мы не делаем это должным образом, потому что <FMT: FormatNumber> и <боб: написать> теги часто непринять это во внимание.

Ваш ответ на вопрос