Java: форматирование с плавающей точкой зависит от локали

Я живу в Бельгии. И вообще, в математике мы пишем наши десятичные числа с запятой, как это: 3,141592
И это также результат, когда я форматирую поплавок.

System.out.println(String.format("%f", 3.141592));

Итак . заменяется , вот так: 3,141592, Поэтому всегда, когда мне нужна точка, я должен добавить что-то вроде этого: String.format("%f", 3.14).replace(',','.');

Итак, вопрос: есть ли способ изменить Locale, который заставляет каждый форматировщик в Java использовать точку, а не запятую?

Спасибо


System.out.println(Locale.getDefault());

печать

nl_BE

4 ответа

Решение

Попробуйте использовать String.format(Locale.US, "%f", floatValue) просто для установки языкового стандарта, используемого во время форматирования.

Простое решение, но оно будет широко распространено по всей локали, состоит в том, чтобы установить систему локали в США или Великобритании. Пример.

Locale.setDefault(Locale.US);

Так как вы изменили вопрос, вы просто указываете локальный метод печати.

System.out.println(String.format(Locale.US, "%f", 3.141592));

Может быть полезно взглянуть на http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html который содержит ряд опций для точного вывода строк с использованием Locale, где это необходимо

DecimalFormat - это конкретный подкласс NumberFormat, который форматирует десятичные числа. Он имеет множество функций, предназначенных для анализа и форматирования чисел в любой локали, включая поддержку западных, арабских и индийских цифр. Он также поддерживает различные виды чисел, в том числе целые числа (123), числа с фиксированной запятой (123.4), научную нотацию (1.23E4), проценты (12%) и суммы в валюте (123 доллара). Все это может быть локализовано.

Часто полезно направлять ввод и вывод с помощью специальных процедур. Вот один из библиотеки JAMA (http://math.nist.gov/javanumerics/jama/)

   public void print (PrintWriter output, int w, int d) {
      DecimalFormat format = new DecimalFormat();
      format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
      format.setMinimumIntegerDigits(1);
      format.setMaximumFractionDigits(d);
      format.setMinimumFractionDigits(d);
      format.setGroupingUsed(false);
      print(output,format,w+2);
   }

Используя это, вы можете быть уверены, что будущие проблемы и улучшения могут быть решены

Для форматирования чисел вы действительно не должны полагаться на toString(), использование String.format()Заводские методы в NumberFormat, или же DecimalFormat, которые позволяют вам контролировать форматирование чисел (первые два, выбрав локаль), не полагаясь на некоторые глобальные настройки.

Другие вопросы по тегам