Округлить значение 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 дает наименьшее целое число, большее или равное аргументу.
Вы можете прочитать об этом здесь