Problem beim umwandeln eines Strings in eine Dzezimalzahl

devjub

Mitglied
Einen schönen guten Morgen an Euch alle.

Ich komme nach mehreren Stunden nicht auf eine Lösung für mein Problem, dass "double b = Double.parseDouble(a);" mit a= "0.0" (aus einem Textdokument ausgelesen, und stimmt auch lt. Debugger) einen Fehler ausgibt. Die Methode "bearbeiteString" habe ich geschrieben, da mir ein Leerzeichen vor der ersten Null in der Fehlermeldung angezeigt wird (Diese verschwindet komischerweise wieder wenn ich diesen Text z.B in dieses Textfeld kopiere). Dieses Leerzeichen fehlt allerdings im übergebenen Parameter.
Wenn ich den String "a" manuell auf "0.0" setze (a = "0.0"; ) bekomme ich keinen Fehler...


Meine Systemdaten:
MacBook late 2009
OS X 10.10 (14A379b)
Netbeans 8.0.2
Java 1.8.0_05-b13



Der problematische Code:

Java:
public Koordinate(String a, String b, String c, String d)
    {
        xKoordinate = bearbeiteString(a);
        yKoordinate = bearbeiteString(b);
        Koordinatennummer = bearbeiteString(c);  
        Raumzugehoeringkeit = d; 
        
    }   
    
    private double bearbeiteString(String a)
    {
        while((a.substring(0,1).equals(" ")))
                {
                    a=a.substring(1,a.length());
                }
        double b = Double.parseDouble(a);
        return b;
    }


Die dazugehörige Fehlermeldung:

Exception in thread "main" java.lang.NumberFormatException: For input string: "0.0"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at Koordinate.bearbeiteString(Koordinate.java:39)
at Koordinate.<init>(Koordinate.java:26)
at Control.erstelleGraph(Control.java:103)
at Control.<init>(Control.java:36)
at Main.main(Main.java:17)



Ich hoffe ich hab nicht zu viele Fehler in meinem ersten Beitrag gemacht 🙂

Viele Grüße

devjub
 
Um Leerzeichen zu entfernen hat Java bereits passende Methoden:
Java:
String a = a.trim();//entfernt alle Leerzeichen am Anfang und Ende

Ansonsten funktioniert dein Code tadellos. Es kann vielleicht sein, das die JVM deines Macs Zahlen nach dem jeweiligen Locale parst.
D.h. vielleicht möchte er "0,0" anstatt "0.0" haben.

Notfalls kannst du die Locale direkt angeben:
Java:
NumberFormat nf = NumberFormat.getInstance(Locale.US);
double value = nf.parse("0.0").doubleValue();
 
Erstmal danke für Deine schnelle Antwort.

Leider funktioniert die vorgeschlagene Problemlösung nicht. Das mit dem "trim" ist ein super Tipp.

Ich habe (hoffentlich richtig) deinen Code eingebaut. Dies gibt dann an dass der Text nicht verarbeitet werden kann... an dem Komma kann es nicht liegen, da der String akzeptiert wird, wenn ich ihn per Hand angebe ("0,0").

Was mich wundert, ist dass die Lokale Variable "value" den richtigen wert angenommen hat (siehe Screenshot)...



Der Quelltext:

Java:
public Koordinate(String a, String b, String c, String d) {        xKoordinate = bearbeiteString(a);
        yKoordinate = Double.parseDouble(b);
        Koordinatennummer = Double.parseDouble(c);
        Raumzugehoeringkeit = d;


    }


    private double bearbeiteString(String a) 
    {
        a = a.trim();
        //double b = Double.parseDouble(a);
        NumberFormat nf = NumberFormat.getInstance(Locale.US);
        double value = 0;
        try {
            value = nf.parse(a).doubleValue();
        } catch (ParseException ex) {
            Logger.getLogger(Koordinate.class.getName()).log(Level.SEVERE, null, ex);
        }
        return value;
    }


Die Fehlermeldung:

SCHWERWIEGEND: null
java.text.ParseException: Unparseable number: "0.0"
at java.text.NumberFormat.parse(NumberFormat.java:385)
at Koordinate.bearbeiteString(Koordinate.java:45)
at Koordinate.<init>(Koordinate.java:31)
at Control.erstelleGraph(Control.java:103)
at Control.<init>(Control.java:36)
at Main.main(Main.java:17)
 

Anhänge

  • Ohne Titel.jpg
    Ohne Titel.jpg
    68,5 KB · Aufrufe: 38
Die Variable hat nicht den korrekten Wert angenommen, sondern immernoch den initialwert von 0. In deinem Beispiel versuchst du halt zufälligerweise genau den selben Wert zu parsen, wodurch die verwechslung zustande kam^^

Kann es vielleicht sein das dein String nicht nur "0.0" enthält, sondern vielleicht irgendwelche nicht druckbaren zeichen? Gib mal die länge des Strings (nach dem trim) auf der Konsole aus. Wenn die Länge ungleich 3 ist, weißt du dass sich da noch ein nichtdruckbares zeichen versteckt hat
 

Zurück
Oben