Ответ 1
Попробуйте использовать String.format(Locale.US, "%f", floatValue)
только для установки языка, используемого во время форматирования.
Я живу в Бельгии. И вообще, в математике мы пишем наши десятичные числа с такой запятой: 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
Попробуйте использовать String.format(Locale.US, "%f", floatValue)
только для установки языка, используемого во время форматирования.
Простое решение, но было бы доступно для всего локали, было бы установить систему Locale в США или Великобританию. Пример.
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 - это конкретный подкласс 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);
}
Используя это, вы можете быть уверены, что будущие проблемы и улучшения, скорее всего, будут устранены.
Для форматирования чисел вы действительно не должны полагаться на toString()
. Используйте String.format()
, методы factory в NumberFormat
или DecimalFormat
, которые позволяют вам управлять форматированием чисел (первые два, выбирая локаль), не полагаясь на некоторые глобальные настройки.