# Float auf bestimmte Nachkommazahl runden



## moccajoghurt (30. Jun 2010)

Hi,

wieder stehe ich vor einer Aufgabe, bei der ich ratlos bin. Habe rumprobiert, aber auf eine Lösung komm ich einfach nicht. Es geht darum eine Funtkion zu erstellen, die eine float-zahl rundet. Hier die Aufgabenstellung:

(9) eine Funktion, die als ersten Parameter einen float-Wert x (zwischen 0 und 1000) und als zweiten Parameter einen positiven int-Wert n (zwischen 1 und 5) übergeben bekommt. Die Funktion soll den Wert x auf n Nachkommastellen runden (Beispiel: f(2.2576F, 3) == 2.258F)

Wichtig dabei: andere Befehle als do, for, while, if, break und continue sind für die Funktion nicht vorgesehen.


----------



## agentone (30. Jun 2010)

Wenn du die Funktion f(m,n) hast, dann
1. Multiplizierst du m n-mal mit 10
2. Schneidest alle Nachkommastellen von m ab.
3. Dividierst m n-mal mit 10


----------



## Lexi (30. Jun 2010)

```
int res = (int)(2.2576F * 10000);
System.out.println(res)->22576
float fRes = res/1000F
System.out.println(fRes) ->2.257
```

So kann man immerhin die Zahlen abschneiden.

Edit : Post#2 war eben noch nicht da


----------



## hemeroc (30. Jun 2010)

Und noch eine Lösung bei der gerundet wird.

// Edit: Sry irgendwie hatte ich überlesen das es ohne zusätzlich Funktionen gehn soll, also hier (eine) zwei Lösungen mit Runden und ohne Zusatzfunktionen:


```
// Lösung ohne extra Funktionen mit Runden [Gute Lösung!]

System.out.println(Coordinate.roundFloat(10.0005F, 3)); // Ausgabe: 10,001
System.out.println(Coordinate.roundFloat(10.0004F, 3)); // Ausgabe: 10,0

public static float roundFloat(final float number, final int decimalPlaces) {
    float precision = 1.0F;
    for (int i = 0; i < decimalPlaces; i++, precision *= 10);
    return ((int) (number * precision + 0.5)  / precision);
}
```


```
// Lösung ohne extra Funktionen mit Runden [Dumme Lösung!]

System.out.println(Coordinate.roundFloat(10.0005F, 3)); // Ausgabe: 10,001
System.out.println(Coordinate.roundFloat(10.0004F, 3)); // Ausgabe: 10,0

public static float roundFloat(final float number, final int decimalPlaces) {
    float precision = 1.0F;
    for (int i = 0; i < decimalPlaces; i++, precision *= 10);
    final int carry = (((int) (number * (precision * 10)) % 10) > 4) ? 1 : 0;
    return ((int) (number * precision) + carry) / precision;
}
```


```
// Achtung: dies ist die alte Version die noch Math.round() verwendet.

System.out.println(Coordinate.roundFloat(10.0005F, 3)); // Ausgabe: 10,001
System.out.println(Coordinate.roundFloat(10.0004F, 3)); // Ausgabe: 10,0

public static float roundFloat(final float number, final int decimalPlaces) {
    final float precision = (float) Math.pow(10, decimalPlaces);
    return (Math.round(number * precision) / precision);
}
```

LG Hemeroc


----------

