Округлить значение BigDecimal до Integer

У меня есть BigDecimal, значение которого 450.90, я хочу округлить до следующего значения целочисленного отверстия, а затем напечатать значение Integer без десятичных точек, например:

Val: 450.90 → Округление: 451,00 → Выход: 451

Val: 100.00001 → Rounded: 101.00000 Выход: 101

Проверено несколько решений, но я не получаю ожидаемого результата, heres my code;

BigDecimal value = new BigDecimal(450.90);
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
return value.intValue();

Спасибо!

Ответ 1

setScale возвращает новый BigDecimal с результатом, он не изменяет экземпляр, на который вы его вызываете. Поэтому верните возвращаемое значение обратно в value:

value = value.setScale(0, RoundingMode.UP);

Живой пример

Я также изменил его на RoundingMode.UP, потому что вы сказали, что всегда хотели округлить. Но в зависимости от ваших потребностей вам может понадобиться RoundingMode.CEILING; это зависит от того, что вы хотите -451.2 стать (-452 [UP] или -451 [CEILING]). Подробнее см. RoundingMode.

Ответ 2

использование:

value.setScale(0, RoundingMode.CEILING);

Ответ 3

Из описания метода:

Обратите внимание, что поскольку объекты BigDecimal являются неизменяемыми, вызовы setScale метод не приводит к изменению исходного объекта, к обычному соглашению о наличии методов с именем setX mutate field X. Вместо этого setScale возвращает объект с соответствующим масштабом; возвращаемый объект может или не может быть вновь назначен.

public void test() {
  BigDecimal value = new BigDecimal(450.90);
  System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451
}

Ответ 4

вам нужно использовать возвращаемое значение

BigDecimal value = new BigDecimal(450.90);
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP

обратите внимание, что BigDecimal является инвариантным

Операции масштабирования/округления (setScale и round) возвращают BigDecimal значение которого приблизительно (или точно) равно значению операнд, но масштаб или точность которого заданы; то есть, они увеличивают или уменьшают точность сохраненного номера с помощью минимальный эффект на его значение.

Ответ 5

используйте функцию Math.ceil(). Метод ceil дает наименьшее целое число, большее или равное аргументу.

Вы можете прочитать об этом здесь