2012-03-27 1 views
3

Ich habe zwei ganzzahlige Werte, x und total. Ich versuche den Prozentsatz von x insgesamt als Ganzzahl zu finden. So mache ich es gerade:Java: Versuchen, den Prozentsatz der Ganzzahlen zu erhalten, wie man aufrunden?

Prozent = (int) ((x * 100)/total);

Der Prozentsatz muss eine ganze Zahl sein. Wenn ich das mache, rundet es immer den Dezimalpunkt ab. Gibt es eine einfache Möglichkeit, den Prozentsatz als Ganzzahl zu berechnen, so dass er aufgerundet wird, wenn die Dezimalstelle 0,5 oder höher ist?

Antwort

13

Verwenden Sie Math.round(x * 100.0/total). Beachten Sie jedoch, dass dies eine lange zurückgibt, so dass eine einfache Umwandlung in int erforderlich ist.

Ich legte 100.0, um es zu zwingen, Gleitkommaarithmetik vor dem Runden zu verwenden.

+0

Es gibt eine überladene Methode, die int zurückgibt. Eine Besetzung ist also nicht unbedingt notwendig. –

+0

@DhariniChandrasekaran Ich glaube, es gibt ein int, wenn Sie in einem Float übergeben? So wie ich es geschrieben habe, wird es doppelt passieren und lange zurückkommen. – joshuahealy

+0

@Churk eigentlich habe ich meine Antwort bearbeitet, weil x, 100 und total alle Ints waren, also wäre die Arithmetik alles ganze gewesen und der Ruf nach Runde wäre Zeitverschwendung gewesen. Ich wechselte zu 100.0, um es Gleitkommaarithmetik zu verwenden, und fügte dann eine Erklärung für es hinzu. – joshuahealy

1

Warum nicht Math.round((x*100)/total);

+0

+1, weil du einige Sekunden vor mir warst :) –

+1

Diese Antwort löst das Problem nicht, da 'x' und' total' beide Ganzzahlen sind. Der Ausdruck wird unter Verwendung von Ganzzahlarithmetik ausgewertet und wird "abgerundet", bevor er in die Rundenfunktion übergeben wird. – joshuahealy

2

Verwenden Sie einfach Math.round(100.0/total * x);

1

die Standard-Mathematik-Bibliothek in Java verwenden.

percentage = Math.round(*your expression here*); 
3
(int)Math.round(100.0/total * x); 

sollte funktionieren.

1

Sie können 0,5 für positive Werte (rund um infitity) in

percentage = (int)(x * 100.0/total + 0.5); 

Dies ist schneller als Math.round verwenden, aber möglicherweise nicht so klar.

BTW: 100.0/total * x gibt möglicherweise nicht das gleiche Ergebnis wie x * 100.0/total, da die Reihenfolge der Auswertung das Ergebnis für Fließkomma ändern kann.

0

einfachste Methode -

Frage: Wie Wert einer Dezimalzahl aufrunden (zB: int n = 4,57)

Antwort: Math.round (n);

Ausgabe: 5.

+0

Es beantwortet nur teilweise die Frage. Könnten Sie eine vollständige Antwort ausarbeiten? –

+0

Es ist auch nicht korrekt; Vielleicht möchten Sie die Frage genauer lesen und die vielen vorhandenen Antworten überprüfen, die sie richtig beantworten. –