Десятичный формат в зависимости от настроек системы? - PullRequest
2 голосов
/ 05 января 2012

У меня самая странная вещь с десятичным форматом.

Я использую его в веб-приложении.Я настроил некоторый тест, и он продолжает терпеть неудачу со мной локально.Мой друг запустил его и смог успешно запустить тесты JUnit.

Странно то, что на нашем сервере приложение работает без проблем.что Java зависит от системных настроек, таких как значения и числа?Или может быть другая причина?Вот так выглядит мой кусок кода:

public String generateFormatPrice(double price) throws Exception {
    DecimalFormat format1 = new DecimalFormat("#,##0.00");
    String tmp = format1.format(price).replace(".", "&");
    String[] tmps = tmp.split("&");
    return tmps[0].replace(',', '.') + "," + tmps[1];
}

Заранее большое спасибо!

1 Ответ

8 голосов
/ 05 января 2012

Этот код действительно зависит от локали. Если ваш код зависит от местоположения, такого как США, где "." это десятичный разделитель, а "," это разделитель тысяч, и затем вы запустите этот код на сервере, настроенном, например, на немецкую локаль, он потерпит неудачу.

Рассмотрите возможность использования этого конструктора , который позволяет вам явно указать, какие символы вы используете.

РЕДАКТИРОВАТЬ: насколько я могу судить, вы пытаетесь отформатировать числа с помощью "." в качестве разделителя тысяч и "," в качестве десятичного разделителя. Другими словами, формат используется во Франции и Германии. Вот один подход, который достигнет этого:

public static String generateFormatPrice(double price) {
    final NumberFormat format = NumberFormat.getNumberInstance(Locale.GERMANY);
    format.setMinimumFractionDigits(2);
    format.setMaximumFractionDigits(2);
    return format.format(price);
}

Кроме того, вам не следует использовать двойное число для хранения денежного значения - в этом случае вы столкнетесь с некоторыми неприятными ошибками.

...