Позвольте мне сначала проверить, правильно ли я понимаю вашу проблему.
double number = 123456.789;
NumberFormat nf = new DecimalFormat("###,###.###");
System.out.println(nf.format(number));
В этом коде используется язык FORMAT по умолчанию. Когда, например, мой стандарт по умолчанию установлен на немецкий, вывод будет:
123.456,789
Использовались символы немецкого формата: точка как разделитель тысяч изапятая как десятичная «точка». Вы не хотите этого.
Решение: Я обычно использую Locale.ROOT
в качестве «нейтральной локали», как способ сказать «не выполняйте никакой специфичной для локали обработки»Вот". Здесь тоже работает. Измените экземпляр средства форматирования на:
NumberFormat nf = new DecimalFormat("###,###.###", new DecimalFormatSymbols(Locale.ROOT));
Теперь вывод - все еще в немецкой локали - это:
123 456,789
Или корочеи, возможно, лучший способ получить тот же результат:
NumberFormat nf = NumberFormat.getInstance(Locale.ROOT);
Нам не нужно беспокоиться о DecimalFormat
, просто NumberFormat
.