Obtenir la valeur entière supérieure suivante en java

je sais que je peux utiliser les maths.fonctions java pour obtenir la valeur floor, ceil ou round pour un double ou float, mais ma question Est -- est-il possible d'obtenir toujours la valeur entière plus élevée si un point décimal vient dans ma valeur

par exemple

int chunkSize  = 91 / 8 ; 

qui sera égal à 11.375

si j'applique le plancher, ceil ou rond à ce nombre il retournera 11 je veux 12.

si j'en ai 11.xxx I j'ai besoin de 12, si j'en AI 50.xxx je veux 51

Désolé de L'chunkSize doit être de type int

Comment puis-je y parvenir?

4
demandé sur Wearybands 2014-04-23 18:11:54

4 réponses

Math.ceil() fera le travail.

mais, votre hypothèse que 91 / 8 est 11.375 est fausse. En java, integer division renvoie la valeur integer de la division (11 dans votre cas).

pour obtenir la valeur float, vous devez lancer (ou ajouter .0) à l'un des arguments:

float chunkSize  = 91 / 8.0 ;
Math.ceil(chunkSize); // will return 12!
11
répondu BobTheBuilder 2014-04-23 14:23:14

ceil est censé faire exactement cela. Je cite:

renvoie la plus petite (la plus proche de l'infini négatif) valeur double que est supérieur ou égal à l'argument et est égale à un mathématiques entier.

EDIT: (merci à Peter Lawrey): prendre un autre regard sur votre code, vous avez un autre problème. Vous stockez le résultat de la division entière dans une variable float: float chunkSize = 91 / 8 ; java regarde les arguments de la division et comme ils sont tous les deux entiers il effectue la division entière ainsi le résultat est de nouveau un entier (le résultat de la division arrondie vers le bas). Maintenant, même si vous assignez ceci au flotteur chunkSize , ce sera toujours un entier(manquant la partie double) et ceil, round et floor retourneront tous la même valeur. Pour éviter cela, ajouter un .0 à 91 : float chunkSize = 91.0 / 8; . Cela rend l'un des arguments double précision et donc double division sera effectuée, retournant un double résultat.

9
répondu Ivaylo Strandjev 2014-04-23 14:22:27

si vous voulez faire la division entière arrondissant vers le haut vous pouvez faire

x / y arrondi, en supposant que x et y soient positifs

long div = (x + y - 1) / y;

dans votre cas

(91 + 8 - 1) / 8 = 100 / 8 = 12

cela fonctionne parce que vous voulez arrondir (ajouter un) pour chaque valeur sauf un multiple exact (ce qui est pourquoi vous ajoutez y - 1 )

4
répondu Peter Lawrey 2014-04-23 14:17:51

tout D'abord, quand vous écrivez float chunkSize = 91 / 8 ; il affichera 11.0 au lieu de 11.375

parce que les valeurs 91 et 8 sont des valeurs de type int. Pour que le résultat soit la valeur décimale, soit le dividende ou le diviseur

ou les deux doivent être de type décimal. Donc, float chunkSize = 91.0 / 8; résultera 11.375 et

maintenant, vous pouvez appliquer les Mathématiques.ceil() pour obtenir la valeur supérieure. Math.ceil(chunkSize); donnera 12.0

1
répondu Aman 2014-04-23 16:14:45