# printf: Unterschied %f und %g



## Herr Rudolf (25. Mai 2011)

Hallo!

Bin totaler Java-/Programmier-Neuling und hätte daher eine Frage zu den Formatangaben der Methode printf().

Und zwar gibt es ja zur Darstellung von Fließkommazahlen die Möglichkeit %f oder %g zu verwenden. 

Ich würd gern wissen, was genau der Unterschied zwischen f und g ist.

Das Handbuch der Java-Programmierung sagt dazu folgendes:
f - Fließkommazahl
g - Fließkommazahl in gemischter Schreibweise  

Was bedeutet gemischte Schreibweise?

Wieso erscheinen double-Werte, die mit f formatiert wurden, mit einem Komma als Dezimalpunkt und double-Werte, die mit g formatiert wurden, mit einem Punkt als Dezimalpunkt? (War jedenfalls bei mir in meinem Testprogramm so...)

Würd mich über Antworten sehr freuen!


----------



## Volvagia (25. Mai 2011)

'f' 	floating point 	The result is formatted as a decimal number
'g', 'G' 	floating point 	The result is formatted using computerized scientific notation or decimal format, depending on the precision and the value after rounding.


----------



## Herr Rudolf (27. Mai 2011)

Danke!

Könntest du mir vielleicht auch noch sagen, wieso das hier 


```
public class Test
{
	public static void main (String[] args)
	{
		double z1, z2, z3, z4;
		
		z1 = 1.0;
		z2 = 4.89;
		z3 = 5.68;
		z4 = 3.10;
		
		System.out.printf("Zahl 1: %f Zahl 2: %f Zahl 3: %g Zahl 4: %g", z1, z2, z3, z4);
	}
}
```

diese Ausgabe ergibt (wg. Kommata bei f und Punkt bei g)?


```
Zahl 1: 1,000000
Zahl 2: 4,890000
Zahl 3: 5.68000
Zahl 4: 3.10000
```

Link zu ner Seite wo ich das nachlesen kann würd auch schon reichen...

Hatte auch schon im Forum danach gesucht und gegoogelt, aber leider nix gefunden.

Danke!


----------



## HoaX (27. Mai 2011)

Also mir fällt da schonmal ein deutlicher Unterscheid auf bei der Ausgabe.


----------



## Spacerat (27. Mai 2011)

Hier z.B. gibt es ein gutes Einsteigerbuch als Download oder hier online oder auch als Download die Java Insel.
der gravierenste Unterschied zwischen &g und %f dürfte der sein, dass %g stets die für einen Computer übliche Ausgabe verwendet (.123e-5 o.ä %G schreibt ein grosses "E") während %f stets auf eine Standard- bzw. vorgegebene Anzahl auf Vor- und Nachkommastellen rundet. %f verwendet dafür auch die in den Localen eingestellten Werte für Dezimal- und Tausendertrennzeichen. Letzteres ist für %g oder %G (Computerdarstellung) natürlich völlig überflüssig.


----------



## Herr Rudolf (27. Mai 2011)

Vielen Dank! Jetzt ist einiges klarer.


----------

