Java arrondit n'importe quel nombre

146

Je n'arrive pas à trouver la réponse que je recherche à une question simple: comment arrondir un nombre au plus proche int?

Par exemple, chaque fois que le nombre est 0,2, 0,7, 0,2222, 0,4324, 0,99999, je voudrais que le résultat soit 1.

Jusqu'ici j'ai

int b = (int) Math.ceil(a / 100);

Cela ne semble pas faire le travail, cependant.

Stevanicus
la source
Pourquoi divisez-vous par 100 dans votre exemple de code?
Jon Skeet
14
Je parie que vous avez un atype entier.
Nikita Rybak
1
oui votre droit est un int ... merci de l'avoir signalé. 100,0 l'ont trié pour moi.
Stevanicus
1
Je suppose que ce qu'il veut est un / 100 arrondi, mais oui, la question pourrait nécessiter une clarification.
Jay
1
REMARQUE: À cette question, de meilleures réponses sont fournies.
martijnn2008

Réponses:

289

Math.ceil()est la fonction correcte à appeler. Je suppose que ac'est un int, ce qui ferait a / 100effectuer l'arithmétique entière. Essayez Math.ceil(a / 100.0)plutôt.

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

Les sorties:

1
1.0
1.42
2.0
2

Voir http://ideone.com/yhT0l

moinudin
la source
3
ceci seulement si "a" est double
L.Grillo
^^ "a" doit être un double ou lancer un double.
Codeversé le
1
aest un intdans cet exemple, et cela fonctionne comme suggéré. Lorsque vous faites int / floatle résultat est un float, comme démontré dans la sortie. Essayez le lien.
dantiston
16

Je ne sais pas pourquoi vous divisez par 100 mais voici mon hypothèse int a;

int b = (int) Math.ceil( ((double)a) / 100);

ou

int b = (int) Math.ceil( a / 100.0);

la source
11
int RoundedUp = (int) Math.ceil(RandomReal);

Cela semblait faire le travail parfait. A travaillé à chaque fois.

Liehan Els
la source
2

10 ans plus tard, mais ce problème m'a encore pris.

Voilà donc la réponse à ceux qui sont trop tard comme moi.

Cela ne fonctionne pas

int b = (int) Math.ceil(a / 100);

Parce que le résultat a / 100s'avère être un entier et qu'il est arrondi, donc Math.ceil ne peut rien y faire.

Vous devez éviter l'opération arrondie avec ce

int b = (int) Math.ceil((float) a / 100);

Maintenant ça marche.

Reginaldo Rigo
la source
0

Le moyen le plus simple de le faire est simplement: vous recevrez un flotteur ou un double et vous voulez qu'il le convertisse en l'arrondi le plus proche, puis System.out.println((int)Math.ceil(yourfloat)); il fonctionnera parfaitement

LouieAdauto
la source
-3

En supposant un double et nous avons besoin d'un nombre arrondi sans décimale. Utilisez la fonction Math.round ().
Cela va comme ma solution.

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1
Ankit Chauhan
la source
1
C'est une mauvaise réponse, car il est demandé ici d'arrondir si a = 0,2 le résultat sera 0
Mohamed23gharbi