# Runden eines doubles auf n nachkommastellen



## Sklo (29. Mai 2011)

Ich wollte fragen wie ich einen double wert auf n nachkommastellen runden kann z.B.

1,4145 -> 1,415 od. 3,6 ->3,60

Mit der methode round in Math kann ich nichts anfangen und meines wisses gibt es auch keine methode zum runden wo man die nachkommastellen angeben kann?
Ich hoffe ihr könnt mir helfen, 
                  mfg Sklo


----------



## r.w. (29. Mai 2011)

Schau mal hier:
http://www.java-forum.org/java-basics-anfaenger-themen/37939-kaufmaennisch-runden.html 

VG ROlf


----------



## pro2 (29. Mai 2011)

Warum kannst du mit round nichts anfangen? 
Wenn du z.B. aus 1.4145 -> 1.415 machen willst geht das so:


```
x = Math.round(x*1000)/1000.0;
```

Du musst dir das halt vorstellen. Du hast also 1.4145 * 1000 = 1414.5, das wird gerundet auf 1415. Das teilst du durch 1000 = 1.415.. Wenn du nur 2 Nachkommastellen haben willst nimmst du dann halt z.B. 100 statt 1000. 

lg


----------



## r.w. (29. Mai 2011)

pro2 hat gesagt.:


> ...
> 
> ```
> x = Math.round(x*1000)/1000.0;
> ...



Was allerdings auch schon hinter dem Link zu erfahren war. ;-)



Wenn Du allerdings die ungerundeten Werte behalten möchtest und 
die Rundung nur für eine formatierte Ausgabe brauchst, geht auch folgendes:


```
...
    public static void main(String[] args) {
        
        double a = 1.4145;
        double b = 3.6;
        gerundeteAusgabe(a, 3);
        gerundeteAusgabe(b, 2);
   
    }   
    
    static void gerundeteAusgabe(double wert, int stellen) {
        StringBuilder sb = new StringBuilder(",##0.");
        for (int i=0; i<stellen; i++)
            sb.append("0");
        DecimalFormat df = new DecimalFormat(sb.toString());
        df.setRoundingMode(RoundingMode.HALF_UP);
        System.out.println(df.format(wert));
    }
...
```


Runden mit variablen Nachkommastellen geht z.B. auch...


```
...

/*
...so:
*/
    static double myRound(double wert, int stellen) {
        return  Math.round(wert * Math.pow(10, stellen)) / Math.pow(10, stellen);
    }
/*
...oder so:
*/    
    static double myRound2(double wert, int stellen) {
        BigDecimal b = new BigDecimal(wert);
        return  b.setScale(stellen,BigDecimal.ROUND_HALF_UP).doubleValue();        
    }
...
```

VG ROlf


----------

