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

Как округлить значение в java

Как округлить значение в java

5 лет назад

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

Ответы

0

Для округления значения в Java можно использовать методы класса java.lang.Math:

  • Math.ceil(double a) - возвращает наименьшее целое число, большее или равное аргументу.
  • Math.floor(double a) - возвращает наибольшее целое число, меньшее или равное аргументу.
  • Math.round(double a) - возвращает ближайшее целое число к аргументу, округляя его вверх или вниз в зависимости от дробной части аргумента.

Примеры использования:

1
2
3
4
5
6
7
8
9
10
double x = 1.23;

// округление вверх
double y = Math.ceil(x); // => 2.0

// округление вниз
double z = Math.floor(x); // => 1.0

// округление до ближайшего целого числа
double w = Math.round(x); // => 1

Если необходимо округлить до определенного числа знаков после запятой, можно воспользоваться классом java.math.BigDecimal, например:

1
2
3
4
5
6
7
8
9
double x = 1.23456789;
int scale = 2; // количество знаков после запятой

BigDecimal bd = new BigDecimal(x);

// округление до ближайшего числа с указанной точностью
bd = bd.setScale(scale, RoundingMode.HALF_UP); 

double y = bd.doubleValue(); // => 1.23

4 года назад

Иван Полежаев

0

Округлить число до целого в Java помогает Math.round() — по обычным правилам, .5 округляется вверх:

1
2
3
System.out.println(Math.round(2.4));   // 2
System.out.println(Math.round(2.5));   // 3
System.out.println(Math.round(-2.5));  // -2

Math.round(double) возвращает long, Math.round(float) — int.

Вверх и вниз

МетодЧто делает2.3-2.3
Math.round()до ближайшего2-2
Math.ceil()вверх3.0-2.0
Math.floor()вниз2.0-3.0
(int)отбрасывает дробную часть2-2

ceil и floor возвращают double. Если нужен int, приведите тип: (int) Math.ceil(2.3).

До нескольких знаков после запятой

Для вывода на экран удобнее всего String.format():

1
2
double price = 1234.5678;
System.out.println(String.format("%.2f", price));  // 1234,57 или 1234.57 — зависит от локали

Чтобы получить именно число с двумя знаками, используйте BigDecimal:

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

BigDecimal rounded = new BigDecimal("1234.5678").setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded);  // 1234.57

Почему не Math.round(x * 100) / 100.0

Такой приём работает в большинстве случаев, но double хранит числа с погрешностью: 1.005 в памяти чуть меньше, чем 1.005, и округлится до 1.0. Для денег используйте BigDecimal и создавайте его из строки.

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

17 дней назад

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

+7 800 100 22 47

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

+7 495 085 21 62

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

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