Discussion:
Decimal separator und Double.valueOf
(zu alt für eine Antwort)
Mel
2004-12-02 09:26:19 UTC
Permalink
Hallo,

Ich hab ein seltsames Problem in java 1.2
Wenn ich aufrufe
Double.valueOf("2.5");
ist alles ok aber auf beiner 2. Maschine funktioniert das
Double.valueOf("2,5");

Offensichtlich ein Lokalisierungsproblem.

Mein erster Ansatz war den lokalisierten decimal separator zu verwenden
char chDec = new DecimalFormatSymbols().getDecimalSeparator();

String ret = "2.5";
char chDec = new DecimalFormatSymbols().getDecimalSeparator();
if(chDec != ',') ret = ret.replace(',', chDec);
if(chDec != '.') ret = ret.replace('.', chDec);
Double.valueOf(ret);

Leider geht das auch nicht. Mein Rechner versteht zwar
Double.valueOf("2.5");
aber die lokalisierte Version
Double.valueOf("2,5");
funkt nicht.

Um nicht mehr von den lokalen Settings abhängig zu sein hab ich mein eigenes
Dezimalformat definiert
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator('.');
df.setDecimalFormatSymbols(dfs);
return df.parse(StrEnforceDecimalDot(strVal)).doubleValue();
Nachdem auch das nur auf einer Mascvhine funktioniert stell ich mir die
Frage was ich da falsch interpretiere?

Maschine 1 sieht folgendermaßen aus:
WinXp German version -> Oracle9iRel2 -> Java running within Oracle

Maschine 2 sieht folgendermaßen aus:
Unix -> Oracle9iRel2 -> Java running within Oracle

Ich nverstehs nicht.
Welches Format liest Double.valueOf parse per Definition?
In der Docu kann ich keine klare Aussage diesbezüglich finden.
Muß ich Oracle NLS Sprachsettings berücksichtigen?

Danke für jede Hilfe
Mel
Michael Probst
2004-12-02 09:52:17 UTC
Permalink
Post by Mel
Welches Format liest Double.valueOf parse per Definition?
In der Docu kann ich keine klare Aussage diesbezüglich finden.
Hi Mel,

Also ob es besonders klar dargestellt ist, kann man bei so einer
Beschreibung natürlich anzweifeln, aber die Doku ist relativ ausführlich
und referenziert auch die java language spec.

MAg man zwar nicht immer reinschauen, hilft vielleicht trotzdem.
In deinem Fall konnte ich eine Lokalisierung für floating point literals
nicht feststellen und bin mir ziemlich sicher dass nur der "." zulässig ist.

Michael

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#valueOf(java.lang.String)
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230798
Michael Probst
2004-12-02 10:42:21 UTC
Permalink
Post by Mel
Welches Format liest Double.valueOf parse per Definition?
In der Docu kann ich keine klare Aussage diesbezüglich finden.
Du warst doch schon da.

NumberFormat/DecimalFormat bieten dir alles was du brauchst.

Michael
Mel
2004-12-02 10:58:59 UTC
Permalink
Danke Sehr
Double.valueOf ("2.5");
ist Lokalisierungsunabhängig und muß überall funktionieren.
Mit dieser Aussage ist mir eigentlich geholfen.
Post by Mel
Welches Format liest Double.valueOf parse per Definition?
In der Docu kann ich keine klare Aussage diesbezüglich finden.
Hi Mel,

Also ob es besonders klar dargestellt ist, kann man bei so einer
Beschreibung natürlich anzweifeln, aber die Doku ist relativ ausführlich
und referenziert auch die java language spec.

MAg man zwar nicht immer reinschauen, hilft vielleicht trotzdem.
In deinem Fall konnte ich eine Lokalisierung für floating point literals
nicht feststellen und bin mir ziemlich sicher dass nur der "." zulässig ist.

Michael

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#valueOf(java.lang.String)
http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230798
Loading...