# Zahlen bei printf auf 2 Nachkommestellen begrenzen



## rene_kochan (4. Nov 2008)

Hallo Leute!
Ich habe heute mit System.out.printf("%.3g",zahl_double); versucht, eine Zahl mit 2 Nachkommastellen auszugeben. Bei einer einstelligen Zahl funktioniert das ja auch, denn da sind es ja insgesamt drei Stellen. Doch wie kann ich es angeben, dass generell 2 Nachkommastellen in der Ausgabe erscheinen? Als Beispiel will ich also 4.56 genauso zweistellig ausgegeben haben wie 13.2345. Doch so einfach ist das ja nicht. Kann mir da jemand weiterhelfen?
Danke im Voraus für eure Antworten!
Tschau!


----------



## Landei (4. Nov 2008)

Aus'm Kopp würde ich sagen "%.2f"

Die genaue Syntax findest du in der Java-Doc von Formatter.


----------



## GilbertGrape (4. Nov 2008)

in deinem beispiel steht doch ne 3... warum?

Edit: so wie Landei würd ichs auch sagen


----------



## rene_kochan (4. Nov 2008)

Hallo!
Danke für die Antworten. Es funktioniert mit "%.2f". Statt dem g für Gleitkommazahlen muss man ein f benutzen. Nun klappt alles reibungslos.
Tschau!


----------



## reddracul (5. Nov 2008)

ich habe ein ähnliches prob.... mit dem .4D habe ich allein rausgefunden.

nun soll ich aber in dem programm eine Benutzereingabe machen, die die anzahl der nachkommastellen angibt.

ich habe jetzt also nen double variable, bei der die nachkommastellenanzahl durch eine short variable begrenzt werden.

habt ihr ne idee?

danke schon mal


----------



## Landei (5. Nov 2008)

Na du kannst den Format-String ja auch "dynamisch" zusammenbasteln:

```
int nachkommastellen = frageNutzer();
String formatString = "%." + nachkommastellen +"f";
String ausgabe = String.format(fomatString, 3.14159);
```


----------



## RedDracul (5. Nov 2008)

hmmmm.... erstmal danke für die schnelle antwort

ich habe jetzt alles möglich mit deinem code ausprobiert und bekomme entweder keine ausgabe oder diese Fehlermeldung

java.util.IllegalFormatPrecisionException: 4
	at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2891)
	at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2642)
	at java.util.Formatter.parse(Formatter.java:2479)
	at java.util.Formatter.format(Formatter.java:2413)
	at java.util.Formatter.format(Formatter.java:2366)
	at java.lang.String.format(String.java:2770)
	at newton.main(newton.java:56)

achso nen ausgabe bekomme ich trotzdem net  

habe ich was vergessen? vllt nen biblio, die ich einfügen muss?


----------



## SlaterB (5. Nov 2008)

> habe ich was vergessen? 

deinen Code zu posten,
oder kommt die Exception bei dir auch bei diesem Beispiel?
bei mir gehts


```
public class Test
{
    public static void main(String args[])
        throws Exception
    {
        int nachkommastellen = 4;
        String formatString = "%." + nachkommastellen + "f";
        String ausgabe = String.format(formatString, 3.14159);
        System.out.println(ausgabe);
    }
}
```


----------



## Guest (5. Nov 2008)

joar währe ja sinnvoll  das habe ich zz getippt


```
public class newton
{
    public static void main( String args[] ) {
        JConsole fenster = new JConsole("newton");
        
        int i=0;
        double a3, a2, a1, a0, x0=0, xn, fx1, fx2, fx, test;
        short stellen;
        
        fenster.println("Hallo und herzlich Willkommen zum Newton-Verfahren!");
        fenster.println("Bitte geben sie für die Funktion f(x) = a3x^3 + a2x^2 + a1x + a0");
        fenster.println("die Entsprechenden Parameter ein.");
        a3 = fenster.readDouble("Wert für a3: ");
        a2 = fenster.readDouble("Wert für a2: ");
        a1 = fenster.readDouble("Wert für a1: ");
        a0 = fenster.readDouble("Wert für a0: ");
        fenster.println("Danke! Jetzt brauche ich noch den Startwert für x0.");
        
                
        for (i=0; i!=-4; i++){
            
            x0 = fenster.readDouble("Wert für x0: ");
            fx = a3*x0*x0*x0 + a2*x0*x0 + a1*x0 + a0;
            fx1 = 3*a3*x0*x0 + 2*a2*x0 + a1;
            fx2 = 6*x0 + 2*a2;
        
            test = ((fx*fx2)/(fx1*fx1));
            if (test < 0)
            test = test * (-1);
        
            if (test > 1)
            x0 = fenster.readDouble("der Startwert ist zu groß. Bitte gib mir einen neuen, kleineren Startwert.");
            else
            i=-5;
    }
    
    fenster.println("Okay, jetzt nur noch die Anzahl der Nachkommastellen und ich lege los.");
    stellen = fenster.readShort("Anzahl der Nachkommastellen: ");
        
    xn = x0;
    
    for (i=0 ; i <= 50; i++){
        xn = xn- ((a3*xn*xn*xn + a2*xn*xn + a1*xn + a0)/(3*a3*xn*xn + 2*a2*xn + a1));
    }

    fenster.print("Die Nullstelle der Funktion lautet: ");
    String formatString = "%." + stellen +"d";
    String ausgabe = String.format(formatString, xn);
    fenster.println(ausgabe);
```

der code von landei allein klappt. nur in meinem program bekomme ich es nicht unter

aus geben will ich hier *xn*
begrenzt wird die nachkommastellenanzahl durch *stellen*


----------



## SlaterB (5. Nov 2008)

Format d steht anscheinend für Integer, für Integer kannst du nicht die Anzahl der Nachkommastellen angeben


----------



## Gast (5. Nov 2008)

ich danke herzlichst.... jetzt klappt es.

echt super slaterB


----------

