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.


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


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);

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

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


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.


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


-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

1
C'est une mauvaise réponse, car il est demandé ici d'arrondir si a = 0,2 le résultat sera 0
Mohamed23gharbi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.