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
, которые позволяют вам контролировать форматирование чисел (первые два, выбрав локаль), не полагаясь на некоторые глобальные настройки.