Format Problem mit Wert - bekomme 0,10 anstatt 10,00

internet

Top Contributor
Hallo,

ich habe ein Problem mit Java 8. Ich hatte davor eine Methode, die mir eine Zahl entsprechend formatiert. In Java7 hatte das m.W. auch funktioniert.
ich habe dazu eine Klasse, in der ich einstelle wieviel Dezimalstellen meine Zahl haben soll etc. (Klasse: FormatSetting).

Mein Problem ist nun aber, dass ich im Parameter mit 10 reingehe, ich aber nicht 10,00 bekomme, sondern 0,10.
Kann mir jemand helfen wo das Problem ist?

Ich vermute hier:

Java:
String format = "#0" + String.format("%." + formatSettings.getNumberDecimalPlaces() + "f", .1)
.replace("1", "0").substring(1);

Aber auch hier bekomme ich #0,00 war doch eigentlich richtig ist?

Java:
public static String formatNumber(FormatSetting formatSettings, Number d) {

        StringBuilder value = new StringBuilder();

        try {
            if (formatSettings != null) {

                DecimalFormatSymbols dcm = new DecimalFormatSymbols(Locale.getDefault());

                if (formatSettings.getNumberDecimalSeparator() != null)
                    dcm.setDecimalSeparator(formatSettings.getNumberDecimalSeparator().charAt(0));

                if (formatSettings.getNumberThousandSeparator() != null)
                    dcm.setGroupingSeparator(formatSettings.getNumberThousandSeparator().charAt(0));
                
                String format = "#0" + String.format("%." + formatSettings.getNumberDecimalPlaces() + "f", .1)
                        .replace("1", "0").substring(1);

                if (formatSettings.getNumberPattern() != null
                        && !FormatSetting.Pattern.NONE.toString().equals(formatSettings.getNumberPattern())) {
                    format = "+" + formatSettings.getNumberPattern() + ";-" + formatSettings.getNumberPattern();
                }

                DecimalFormat dc = new DecimalFormat(format, dcm);
                String numberStr = dc.format(d);

                if (formatSettings.getNumberNegativeSignSymbol() != null && FormatSetting.SignPosition.BEGINNING
                        .toString().equals(formatSettings.getNumberNegativeSignPosition())) {
                    if (d.doubleValue() < 0)
                        value.append(formatSettings.getNumberNegativeSignSymbol());
                }

                value.append(numberStr);

                if (formatSettings.getNumberNegativeSignSymbol() != null && FormatSetting.SignPosition.END.toString()
                        .equals(formatSettings.getNumberNegativeSignPosition())) {
                    if (d.doubleValue() < 0)
                        value.append(formatSettings.getNumberNegativeSignSymbol());
                }
            }

            return value.toString();

        } catch (Exception ex) {
            ex.printStackTrace();
            value = new StringBuilder("" + d);
        }
        return "";
    }

Hier mal die Ausgabe im Debugger von DecimalFormat dc

1612251604010.png

Hier meine Werte für die Einstellung:
1612252122268.png
 
K

kneitzel

Gast
Aber auch hier bekomme ich #0,00 war doch eigentlich richtig ist?
Das , ist doch das Grouping Separator und nicht der Decimal separator. Siehe
da wird das in einer Tabelle auch erläutert.

Das Du später ein , in der Ausgabe haben willst, spielt da keine Rolle. Das kommt ja durch DecimalFormatSymbols - diese ändern aber nichts an den Vorgaben des Formats!
 
K

kneitzel

Gast
Vermutlich willst Du, dass dein format String #0.00 ist. Aber genau kann ich es nicht sagen, da ich nicht wirklich durchblicke, was Du da aus welchem Grund gebaut hast.

Aber bezüglich des Codes evtl. zwei Dinge, die mir aufgefallen sind:
- Catch von Exception ist etwas, das man in der Regel vermeiden sollte... Statt dessen gezielt die Exceptions abfangen, die notwendig sind.
- Du setzt in catch value aber gibst den leeren String zurück - Du willst evtl. generell value.toString() zurück geben ...
 

krgewb

Top Contributor
Java 1.8:
Java:
import java.text.DecimalFormat;

public class Main {

	public static void main(String[] args) {

		double z = 10.0;

		DecimalFormat dz = new DecimalFormat("#0.00");
		System.out.println(dz.format(z));

		DecimalFormat dz2 = new DecimalFormat("#0,00");
		System.out.println(dz2.format(z));
	}

}

Ausgabe:
Java:
10,00
0.10
 
K

kneitzel

Gast
Nur noch als kurze Randbemerkung bezüglich dem "," -> Das ist ja wie bereits geschrieben ein Grouping Separator. Du willst also nach zwei Zeichen Gruppieren ... und Du willst Da noch eine 0 davor haben. Daher ist das weiterhin eine 10. Diese bekommt aber noch eine führende 0: 010 und nach den ersten Zwei Ziffern kommt der grouping separator: 0.10.

Bezüglich Grouping Separator kann man ja einfach mal paar mehr Dinge machen, wie z.B. den Standard Separator durch ein Leerzeichen ersetzen um dann mal mehrere Separatoren anzugeben:
Java:
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setGroupingSeparator(' ');
        DecimalFormat formater = new DecimalFormat("#,#0", symbols);
        System.out.println(formater.format(123.0));
        System.out.println(formater.format(1234.0));
        System.out.println(formater.format(12345.0));

Dann wird die Funktion deutlich falls dies noch etwas unklar war denke ich. # sind halt optionale Ziffern, 0 steht für eine Ziffer, die immer geben werden soll und "," für den Grouping Separator. Wichtig ist halt, dass es um eine feste Gruppierung geht. Also gehen immer nur gleiche Blöcke und kein "#,##,#" oder so (Also am Ende nur eine Ziffer, davor zwei ....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Out.format problem. Java Basics - Anfänger-Themen 3
H SimpleDataFormat.format() spuckt falsches Jahr aus (statt 1999 = 3899) Java Basics - Anfänger-Themen 7
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
N Best Practice How can I creat a programm with java under windows 10 in order to open an spreadsheet in libreoffice calc format Java Basics - Anfänger-Themen 11
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
W OOP Objektorientiert: Darstellung von Uhrzeiten im 24-Stunden-Format Java Basics - Anfänger-Themen 15
L Java Date Format ändern Java Basics - Anfänger-Themen 5
M JSON Format Java Basics - Anfänger-Themen 5
B Schleife erstellen mit String Format "001" bis "999" Java Basics - Anfänger-Themen 2
N jodaTime java.lang.IllegalArgumentException: Invalid format Java Basics - Anfänger-Themen 3
V Datentypen Richtiges Format abspeichern Java Basics - Anfänger-Themen 13
F JSON in dokumentierten Format als PDF Java Basics - Anfänger-Themen 3
J Jar Format Java Basics - Anfänger-Themen 4
J Programm im Jar-Format funktioniert nicht richtig Java Basics - Anfänger-Themen 9
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
M Variablen Ausgabe bei System.out.format? Java Basics - Anfänger-Themen 3
M String.format Java Basics - Anfänger-Themen 3
S Fehlermeldung bei format methode Java Basics - Anfänger-Themen 1
L Java Format Strings Java Basics - Anfänger-Themen 2
S String.format Fehler Java Basics - Anfänger-Themen 12
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
C Welches Format gibt Java aus? Java Basics - Anfänger-Themen 5
G String auf Format prüfen Java Basics - Anfänger-Themen 3
A String auf Format überprüfen Java Basics - Anfänger-Themen 7
U String.format (%s, %d) für Nummern Java Basics - Anfänger-Themen 37
L Erste Schritte int-Format Java Basics - Anfänger-Themen 5
N Change date Format Java Basics - Anfänger-Themen 2
T String.format Exception Java Basics - Anfänger-Themen 7
M Simple Date Format Java Basics - Anfänger-Themen 2
C string-Format Java Basics - Anfänger-Themen 6
O Tabelle Formatieren mit system.out.format Java Basics - Anfänger-Themen 11
Z System.out.format, Hilfe. Java Basics - Anfänger-Themen 14
H format() - methode Java Basics - Anfänger-Themen 2
L X509 Zertifikat in PKCS#7 Format Java Basics - Anfänger-Themen 2
K Methoden format() mit Point(x, y)-Objekt Java Basics - Anfänger-Themen 14
M Zeit von microsekunden auf Format mm:ss Java Basics - Anfänger-Themen 13
E formartierte Aussgabe mit JTextPane und String.format Java Basics - Anfänger-Themen 5
J java.util.format => mit String? Java Basics - Anfänger-Themen 2
Spin System.out.format Java Basics - Anfänger-Themen 2
N Datumseingabe im bestimmtem Format Java Basics - Anfänger-Themen 16
T scanner bestimmtes format abfragen Java Basics - Anfänger-Themen 5
D Bytes für WAV Format anpassen Java Basics - Anfänger-Themen 5
K Double Format Java Basics - Anfänger-Themen 4
-horn- Wie am Einfachsten mit Config-Datei umgehen. Welches Format? Java Basics - Anfänger-Themen 6
T Umwandeln in .jar - Format Java Basics - Anfänger-Themen 2
B Datumsstring umwandeln in richtiges dd.mm.yyyy format? Java Basics - Anfänger-Themen 2
R String.format() funktioniert nicht Java Basics - Anfänger-Themen 2
G String in Date Format umwandeln Java Basics - Anfänger-Themen 8
M String.format() max. Spaltenbreite Java Basics - Anfänger-Themen 2
G Time-Format-Klasse ode so Java Basics - Anfänger-Themen 2
P e-format Java Basics - Anfänger-Themen 5
H Format des Datums in Logdatei Java Basics - Anfänger-Themen 2
M Festes Format bei der Ausgabe einhalten! Java Basics - Anfänger-Themen 4
S long millisekunden nach Uhrzeit format Java Basics - Anfänger-Themen 5
S Java 1.5 System.out.format() Java Basics - Anfänger-Themen 2
R Alternative zu "Format" in Java 1.4 Java Basics - Anfänger-Themen 3
R Java 5.0 / String.format - Warning Java Basics - Anfänger-Themen 8
G Zeit auslesen in bestimmtem Format Java Basics - Anfänger-Themen 2
X Dezimal/-Hexcode in lebares format umwandeln Java Basics - Anfänger-Themen 4
V String Format Java Basics - Anfänger-Themen 4
B welches format hat java.sql.date? Java Basics - Anfänger-Themen 9
G format für int Java Basics - Anfänger-Themen 10
B Integer format bestimmen Java Basics - Anfänger-Themen 2
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben