Java округляется до int с использованием Math.ceil - PullRequest
86 голосов
/ 21 августа 2011
int total = (int) Math.ceil(157/32);

Почему он по-прежнему возвращает 4?157/32 = 4.90625, мне нужно округлить, я посмотрел вокруг, и это, кажется, правильный метод.

Я пробовал total как double тип, но получаю 4.0.

Что я делаю не так?

Ответы [ 14 ]

1 голос
/ 23 августа 2013

Также для преобразования числа из целого в действительное число можно добавить точку:

int total = (int) Math.ceil(157/32.);

И результат (157/32.) Также будет действительным.;)

0 голосов
/ 15 февраля 2017

Java обеспечивает только разделение по этажам / по умолчанию.Но мы можем написать потолок в терминах этажа .Давайте посмотрим:

Любое целое число y можно записать в виде y == q*k+r.Согласно определению деления по полу (здесь floor), которое округляется r,

floor(q*k+r, k) == q  , where 0 ≤ r ≤ k-1

и делению по потолку (здесь ceil), которое округляется до r₁,

ceil(q*k+r₁, k) == q+1  , where 1 ≤ r₁ ≤ k

где мы можем заменить r+1 на r₁:

ceil(q*k+r+1, k) == q+1  , where 0 ≤ r ≤ k-1

Затем мы подставляем первое уравнение в третье для q, получая

ceil(q*k+r+1, k) == floor(q*k+r, k) + 1  , where 0 ≤ r ≤ k-1

Наконец, учитывая любое целое число y, где y = q*k+r+1 для некоторых q, k, r, у нас есть

ceil(y, k) == floor(y-1, k) + 1

И мы закончили.Надеюсь, это поможет.

0 голосов
/ 07 ноября 2014

Используйте двойное, чтобы разыграть как

Math.ceil((double)value) или как

Math.ceil((double)value1/(double)value2);
0 голосов
/ 08 октября 2014
int total = (157-1)/32 + 1

или более общий

(a-1)/b +1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...