Java Arrotondare qualsiasi numero


146

Non riesco a trovare la risposta che sto cercando per una semplice domanda: come arrotondare un numero al più vicino int?

Ad esempio, ogni volta che il numero è 0,2, 0,7, 0,2222, 0,4324, 0,99999, vorrei che il risultato fosse 1.

Finora l'ho fatto

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

Non sembra fare il lavoro, però.


Perché stai dividendo per 100 nel tuo codice di esempio?
Jon Skeet,

14
Scommetto che il tuo aha un numero intero.
Nikita Rybak,

1
sì, proprio a è un int ... grazie per averlo sottolineato. 100.0 lo ha ordinato per me.
Stevanicus,

1
Immagino che ciò che vuole sia un / 100 arrotondato per eccesso, ma sì, la domanda potrebbe usare alcuni chiarimenti.
Jay,

1
NOTA: a questa domanda vengono fornite risposte migliori.
martijnn2008,

Risposte:


289

Math.ceil()è la funzione corretta da chiamare. Immagino che asia un int, che farebbe a / 100eseguire l'aritmetica intera. Prova Math.ceil(a / 100.0)invece.

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

Uscite:

1
1.0
1.42
2.0
2

Vedi http://ideone.com/yhT0l


3
questo solo se "a" è doppio
L.Grillo,

^^ "a" deve essere un doppio o lanciare un doppio.
Codeversed

1
aè un intesempio in questo esempio e funziona come suggerito. Quando si esegue int / floatil risultato è un float, come dimostrato nell'output. Prova il link.
Dantiston,

16

Non so perché ti dividi per 100 ma qui la mia ipotesi int a;

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

o

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

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

Questo sembrava fare il lavoro perfetto. Ha funzionato ogni volta.


2

10 anni dopo, ma quel problema mi ha ancora colpito.

Quindi questa è la risposta a quelli che sono troppo tardi come me.

Questo non funziona

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

Perché il risultato a / 100risulta essere un numero intero ed è arrotondato, quindi Math.ceil non può farci nulla.

Devi evitare l'operazione arrotondata con questo

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

Ora funziona.


0

Il modo più semplice per farlo è solo: riceverai un float o un double e vorrai che lo converta nel round più vicino, quindi semplicemente System.out.println((int)Math.ceil(yourfloat)); funzionerà perfettamente


-3

Supponendo un doppio e abbiamo bisogno di un numero arrotondato senza decimale. Utilizzare la funzione Math.round ().
Questa è la mia soluzione.

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

Output : 
a:1

1
Questa è una risposta sbagliata, poiché qui viene richiesto di arrotondare per
eccesso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.