web-dev-qa-db-fra.com

arrondir un nombre à virgule flottante à la valeur entière suivante dans java

comment arrondir un nombre à virgule flottante à la prochaine valeur entière en Java? Supposer

2.1 -> 3

3.001 -> 4

4,5 -> 5

7,9 -> 8

45
S.K

Vous devriez regarder l'arrondi du plafond dans les packages mathématiques de Java: Math.ceil


EDIT: Ajout du javadoc pour Math.ceil. Cela vaut peut-être la peine de lire toute la méthode en mathématiques.

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

public static double ceil(double a)

Renvoie la plus petite valeur double (la plus proche de l'infini négatif) supérieure ou égale à l'argument et égale à un entier mathématique. Cas spéciaux:

  • Si la valeur de l'argument est déjà égale à un entier mathématique, le résultat est le même que l'argument.
  • Si l'argument est NaN ou un infini ou un zéro positif ou un zéro négatif, le résultat est le même que l'argument.
  • Si la valeur de l'argument est inférieure à zéro mais supérieure à -1,0, le résultat est un zéro négatif.

Notez que la valeur de Math.ceil(x) est exactement la valeur de -Math.floor(-x).

38
Steven

essaye ça

float a = 4.5f;

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

System.out.println(d);
19
Jatin

J'ai eu le même problème où j'obtenais toujours la plus petite valeur int. C'était la division, pas le Math.ceil. Vous devez ajouter un plâtre (flottant) aux entrées. Voici comment je l'ai corrigé:

int totalNumberOfCachedData = 201;
int DataCountMax = 200;

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

Cela me donnera 2 pour la valeur de roundInt.

10
JeffMeJones

Voir

float a=10.34f,b=45.678f;

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

Sortie

11
46
7
Lion

Si cela aide quelqu'un, voici comment je fais fonctionner cela:

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

System.out.println(pagesQty);

//Displays 1

Le diviseur doit être un flotteur pour fonctionner correctement.

2
Ph0b0x

J'utilise ceci:

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