Java Runden Sie eine beliebige Zahl auf

146

Ich kann anscheinend keine Antwort auf eine einfache Frage finden: Wie runde ich eine Zahl auf die nächste auf int?

Wenn zum Beispiel die Zahl 0,2, 0,7, 0,2222, 0,4324, 0,99999 ist, möchte ich, dass das Ergebnis 1 ist.

Soweit habe ich

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

Es scheint jedoch nicht den Job zu machen.

Stevanicus
quelle
Warum teilen Sie in Ihrem Beispielcode durch 100?
Jon Skeet
14
Ich wette, Sie haben aeinen ganzzahligen Typ.
Nikita Rybak
1
Ja, dein Recht ist ein int ... danke, dass du darauf hingewiesen hast. 100.0 hat es für mich sortiert.
Stevanicus
1
Ich vermute, was er will, ist eine / 100 aufgerundet, aber ja, die Frage könnte eine Klarstellung gebrauchen.
Jay
1
HINWEIS: Bei dieser Frage werden bessere Antworten gegeben.
Martijnn2008

Antworten:

289

Math.ceil()ist die richtige Funktion zum Aufrufen. Ich vermute, es aist eine int, die a / 100eine ganzzahlige Arithmetik durchführen würde. Versuchen Sie es Math.ceil(a / 100.0)stattdessen.

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

Ausgänge:

1
1.0
1.42
2.0
2

Siehe http://ideone.com/yhT0l

Moinudin
quelle
3
Dies nur, wenn "a" doppelt ist
L.Grillo
^^ "a" muss ein Double sein oder ein Double werfen.
Codeversed
1
aist ein intin diesem Beispiel, und es funktioniert wie vorgeschlagen. Wenn dabei int / floatdas Ergebnis ist ein float, wie in der Ausgabe unter Beweis gestellt. Probieren Sie den Link aus.
Dantiston
16

Ich weiß nicht, warum Sie durch 100 teilen, aber hier meine Annahme int a;

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

oder

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

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

Dies schien den perfekten Job zu machen. Arbeitete jedes Mal.

Liehan Els
quelle
2

10 Jahre später hat mich dieses Problem immer noch erwischt.

Das ist also die Antwort auf diejenigen, die zu spät sind wie ich.

Das funktioniert nicht

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

Das Ergebnis a / 100ist eine ganze Zahl und gerundet, sodass Math.ceil nichts dagegen tun kann.

Sie müssen dabei die gerundete Operation vermeiden

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

Jetzt gehts.

Reginaldo Rigo
quelle
0

Der einfachste Weg, dies zu tun, ist einfach: Sie erhalten einen Float oder Double und möchten, dass er in die nächste Aufrundung umgewandelt wird. Dann funktioniert System.out.println((int)Math.ceil(yourfloat)); es einfach perfekt

LouieAdauto
quelle
-3

Angenommen, a ist doppelt und wir brauchen eine gerundete Zahl ohne Dezimalstelle. Verwenden Sie die Funktion Math.round ().
Das ist meine Lösung.

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

Output : 
a:1
Ankit Chauhan
quelle
1
Dies ist eine falsche Antwort, da hier gefragt wird, ob a = 0,2
aufgerundet