/
Вопросы и ответы
/
Java
/

Как ограничить количество знаков после запятой java

Как ограничить количество знаков после запятой java

5 лет назад

Человек-Молекула

Ответы

0

Можно сделать таким образом :

1
2
3
DecimalFormat myFormat = new DecimalFormat("#.###"); // округляем до 3-х знаков после запятой
Double x = 0.333333;
System.out.println(myFormat.format(x)); // => 0.333

4 года назад

Сергей Якимович

0

Также можно воспользоваться методом format() класса String :

1
2
3
4
double x = 0.33333;
String s = String.format("%.2f", x); // округляем x до 2-х знаков после запятой

System.out.println(s); // => 0,33

4 года назад

Сергей Якимович

0

Сначала решите, что нужно: красиво вывести число или округлить само значение для дальнейших расчётов.

Вывести с нужным числом знаков

1
2
3
4
double x = 3.14159;

System.out.printf("%.2f%n", x);           // 3.14
String s = String.format("%.2f", x);      // "3.14"

%.2f — два знака после запятой с округлением. Само число x не меняется.

String.format берёт разделитель из локали системы: на компьютере с русской локалью будет 3,14. Чтобы всегда была точка:

1
String s = String.format(Locale.US, "%.2f", x); // "3.14"

DecimalFormat

1
2
3
4
5
6
7
8
import java.text.DecimalFormat;

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(3.10));   // 3.1
System.out.println(df.format(3.14159)); // 3.14

DecimalFormat fixed = new DecimalFormat("0.00");
System.out.println(fixed.format(3.1)); // 3.10

# выводит цифру, только если она значимая, 0 выводит цифру всегда. По умолчанию DecimalFormat округляет «к ближайшему чётному»: 2.345 может стать 2.34. Обычное округление задают так: df.setRoundingMode(RoundingMode.HALF_UP).

Округлить само число

1
double rounded = Math.round(x * 100) / 100.0; // 3.14

Делите на 100.0. При делении на 100 деление будет целочисленным и отбросит дробную часть.

Деньги и точные расчёты: BigDecimal

double хранит числа приблизительно: 0.1 + 0.2 даёт 0.30000000000000004. Для денег используют BigDecimal:

1
2
3
4
5
6
import java.math.BigDecimal;
import java.math.RoundingMode;

BigDecimal price = new BigDecimal("19.995");
BigDecimal result = price.setScale(2, RoundingMode.HALF_UP);
System.out.println(result); // 20.00

Создавайте BigDecimal из строки: new BigDecimal(19.995) унаследует погрешность double.

Отбросить лишние знаки без округления

1
double truncated = Math.floor(x * 100) / 100; // 3.14

Для отрицательных чисел используйте RoundingMode.DOWN у BigDecimal: Math.floor округляет вниз, к минус бесконечности.

Типы чисел и форматирование разбирают в бесплатном курсе «Основы Java».

17 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845