округлить число с плавающей точкой до следующего целочисленного значения в Java - PullRequest
44 голосов
/ 06 января 2012

как можно округлить число с плавающей запятой до следующего целочисленного значения в Java?Предположим

2,1 -> 3

3,001 -> 4

4,5 -> 5

7,9 -> 8

Ответы [ 6 ]

37 голосов
/ 06 января 2012

Вы должны посмотреть на округление потолка в математических пакетах java: Math.ceil


РЕДАКТИРОВАТЬ: Добавлен Javadoc для Math.ceil. Возможно, стоит прочитать весь метод по математике.

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#ceil%28double%29

public static double ceil(double a)

Возвращает наименьшее (ближайшее к отрицательной бесконечности) двойное значение, которое больше или равно аргументу и равно математическое целое число Особые случаи:

  • Если значение аргумента уже равно математическому целому числу, то результат совпадает с аргументом.
  • Если аргумент равен NaN или бесконечности, либо положительному нулю, либо отрицательному нулю, то результат совпадает с аргументом.
  • Если значение аргумента меньше нуля, но больше -1.0, результат будет отрицательным нулем.

Обратите внимание, что значение Math.ceil(x) является точно значением -Math.floor(-x).

19 голосов
/ 06 января 2012

попробуйте

float a = 4.5f;

int d = (int) Math.ceil(a);

System.out.println(d);
10 голосов
/ 26 марта 2014

У меня была та же проблема, когда я все еще получал меньшее значение int.Это было разделение, а не Math.ceil.Вы должны добавить (float) приведение к ints.Вот как я это исправил:

int totalNumberOfCachedData = 201;
int DataCountMax = 200;

float ceil =(float) totalNumberOfCachedData / (float)DataCountMax;
int roundInt = (int) Math.ceil(ceil);

Это даст мне 2 для значения roundInt.

7 голосов
/ 06 января 2012

См

float a=10.34f,b=45.678f;

System.out.println((int)Math.ceil(a));
System.out.println((int)Math.ceil(b));

выход

11
46
2 голосов
/ 09 марта 2018

Если это кому-то поможет, вот как я могу заставить это работать:

int arraySize = 3;
int pageSize = 10;
int pagesQty = (int) Math.ceil(arraySize / (float) pageSize);

System.out.println(pagesQty);

//Displays 1

Для правильной работы делитель должен быть поплавком.

2 голосов
/ 01 октября 2015

Я использую это:

public static int roundDoubleToUpperInt(double d){
    return (d%1==0.0f)?(int)d:(int)(d+1);
}
...