Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

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

#java #математика


Функция в 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 Может я не правильно понимаю,
как они работают?
    


Ответы

Ответ 1



Для удобства любого округления лучше всего использовать класс BigDecimal: new BigDecimal(12.0/5).setScale(0, RoundingMode.CEILING).doubleValue(); Первый параметр указывает до какого знака округление, а второй - правило округления.

Ответ 2



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

Ответ 3



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

Комментариев нет:

Отправить комментарий