Math округление в java

186
21 августа 2018, 00:40

Функция в java Math.ceil() должна округлять число при делении в большую сторону, т.е. вправо Так при делении 12/5 = 2.4, тогда Math.ceil(12/5) = 3; но:

public static void main(String[] args) {
        System.out.println(Math.ceil(12/5));
    }

Выводит мне 2.0 , Math.floor(12/5) тоже выводит 2.0 Может я не правильно понимаю, как они работают?

Answer 1

Для удобства любого округления лучше всего использовать класс BigDecimal:

new BigDecimal(12.0/5).setScale(0, RoundingMode.CEILING).doubleValue();

Первый параметр указывает до какого знака округление, а второй - правило округления.

Answer 2

Дело в том, что 12/5 - само по себе целочисленное деление, результат уже равен 2.

Math.ceil(12.0/5) == 3.0

Answer 3

Проблема в том, что в java нет таких специальных операторов как div или mod как в Pascal. Потому, знак / работает как целочисленное деление 12/5 действительно равно 2 (и остаток 2). Именно потому, если мы хотим получить дробь, нам нужно кастонуть целочисленный делитель и делимое к float. А сделать это можно как угодно. Хоть 12f/5f, хоть (float)a/(float)b. И только после этого уже можно производить округления и пр.

READ ALSO
Создание рамки вокруг меню

Создание рамки вокруг меню

http://joxiru/823BopeTJ8ORQm

191
<!DOCTYPE html> не даёт работать JS

<!DOCTYPE html> не даёт работать JS

С <!DOCTYPE html> не работает эта функция ; работает только с xhtml либо без <!DOCTYPE html>Помогите разобраться, пожалуйста

201
mediaelementjs прокрутка загружаемых файлов

mediaelementjs прокрутка загружаемых файлов

такой плагин подключен http://mediaelementjscom/ в нем запускаются на проигрывание файлы которые еще качаются из сети

194
Как сделать так, чтобы таймер акции после окончания выводил сообщение?

Как сделать так, чтобы таймер акции после окончания выводил сообщение?

Есть код на фидле, необходимо добавить всплывающее окно после завершения акции

189