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.


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


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

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

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


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.


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


-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

1
Dies ist eine falsche Antwort, da hier gefragt wird, ob a = 0,2
aufgerundet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.