#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. И только после этого уже можно производить округления и пр.
Комментариев нет:
Отправить комментарий