Подтвердить что ты не робот

Java: форматирование Float зависит от языка

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

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
4b9b3361

Ответ 1

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

Ответ 2

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

Locale.setDefault(Locale.US);

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

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

Ответ 3

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

DecimalFormat - это конкретный подкласс of 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);
   }

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

Ответ 4

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