NumberFormat
Форматирует числа, деньги и проценты по правилам выбранной страны.
Доступно с: Java 1.1
Синтаксис
public abstract class NumberFormat extends FormatПримеры
Одно число в разных локалях:
void main() {
double amount = 1234567.891;
IO.println(NumberFormat.getInstance(Locale.US).format(amount));
IO.println(NumberFormat.getInstance(Locale.GERMANY).format(amount));
IO.println(NumberFormat.getCurrencyInstance(Locale.US).format(amount));
IO.println(NumberFormat.getPercentInstance(Locale.US).format(0.256));
}Результат:
1,234,567.891
1.234.567,891
$1,234,567.89
26%Короткая запись (Java 12) и разбор строки с запятой:
void main() throws Exception {
var compact = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
IO.println(compact.format(1_250_000));
IO.println(NumberFormat.getInstance(Locale.GERMANY).parse("3,14"));
}Результат:
1M
3.14Примечания
Всегда передавайте локаль явно: без неё используются настройки системы, и вывод на разных компьютерах будет разным. Класс в пакете java.text; объекты не потокобезопасны. Для простого вывода с двумя знаками часто хватает String.format(Locale.ROOT, "%.2f", x).
См. также
- String.format() — Собирает строку по шаблону с подстановками вроде %s и %d.
- BigDecimal — Точное десятичное число — для денег и расчётов, где недопустимы ошибки округления double.
- Double.parseDouble() — Превращает строку с дробным числом в double.
Вопросы и ответы по теме
В учебнике
- Текстовые блоки и форматирование — Многострочные текстовые блоки в Java, форматирование строк через formatted, String.format и printf, спецификаторы %s, %d, %f и ширина поля.