Frage von raptinator, 33

Wie runde ich in Java auf n Nachkommastellen ohne die math-Methoden?

Hi haben diese Aufgabe bekommen: " a) Schreiben Sie eine Methode, die eine übergebene Zahl auf- oder abrundet. Beispiele: 3,2 wird auf 3 abgerundet, 3,5 auf 4 aufgerundet. b) Schreiben Sie eine weitere Methode, welche eine übergebene Zahl auf eine bestimmte Anzahl Nachkommastellen rundet. Die Anzahl der Nachkommastellen soll anhand eines zusätzlich übergebenen Parameters bestimmt werden können. Hinweis: Die Verwendung sämtlicher Methoden aus der Klasse Math ist untersagt! "

Die Aufgabe a) habe ich hinbekommen. Nun komme ich aber bei der b) nicht weiter. Kann mir da vielleicht jemand helfen?

Antwort
von shilch, 26

a)

Du teilst deine Zahl Modulo 1 und erhälst die Nachkommastellen.

double nachkommastellen = zahl % 1;

Damit kannst du entsprechend über auf- / abrunden entscheiden. Deine Zahl ist dann also:

double runden = 3.14;
boolean aufrunden = runden % 1 >= 0.5;
int gerundet = ((int) runden) + (aufrunden ? 1 : 0);

b)

Das gleiche, diesmal multiplizierst du deine Zahl vorher mit 10^(Anzahl der Nachkommastellen):

double nachkommastellen = zahl * Math.pow(10, n) % 1;

Der Code sieht dann ähnlich wie oben aus.

Kommentar von Belaro ,

Kleiner Anmerk: Falls du Allgemein die Klasse Math nicht verwenden darfst, dann ersetzt du 

Math.pow(10, n)

durch

10^n 
Kommentar von shilch ,

Nein, das geht nicht! Das Zeichen ^ ist ein bitweises XOR.

Du suchst nachher nur den Fehler.

Kommentar von raptinator ,

Also in der Aufgabe steht keine Math Methoden. Also denke ich mal es gilt auch für Math.pow

Kommentar von Isendrak ,

Dann wähle eine von diesen:

class NotMath{
//Rekursiv
public static double r_pow(double x, int y){
if(y > 0) return x * pow(x, y - 1);
else return 1.0;
}
//Iterativ
public static double i_pow(double x, int y){
double z = 1.0;
for(int i = y; i > 0; i--)
z *= x;
return z;
}
}

Keine passende Antwort gefunden?

Fragen Sie die Community