it-swarm.com.de

Wie konvertiere ich einen String in Java nach Double unter Verwendung eines bestimmten Gebietsschemas?

Ich möchte einige Zahlen, die ich als Strings erhalten habe, in Doubles konvertieren, aber diese Zahlen sind nicht im US-Standardgebietsschema, sondern in einem anderen. Wie kann ich das machen?

35

Versuchen Sie es mit Java.text.NumberFormat . Aus den Javadocs:

Um eine Nummer für ein anderes Gebietsschema zu formatieren, geben Sie sie im Aufruf von getInstance an. 

NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);

Sie können auch ein NumberFormat verwenden, um Zahlen zu analysieren: 

myNumber = nf.parse(myString);

parse() gibt eine Number zurück; Um eine double zu erhalten, müssen Sie myNumber.doubleValue() aufrufen:

    double myNumber = nf.parse(myString).doubleValue();

Beachten Sie, dass parse() niemals null zurückgibt, daher kann dies keine NullPointerException verursachen. Stattdessen wirft parse eine geprüfte ParseException, falls dies fehlschlägt.

Edit: Ich habe ursprünglich gesagt, dass es eine andere Möglichkeit gibt, in double zu konvertieren: das Ergebnis in Double umwandeln und Unboxing verwenden. Ich dachte, da eine Universalinstanz von NumberFormat verwendet wurde (gemäß den Javadocs für getInstance ), würde sie immer eine Double zurückgeben. DJClayworth weist jedoch darauf hin, dass die Javadocs für parse(String, ParsePosition) (die von parse(String) aufgerufen wird) sagen, dass eine Long zurückgegeben wird, wenn dies möglich ist. Daher ist das Ergebnis auf Double zu werfen, ist unsicher und sollte nicht versucht werden!
Danke, DJClayworth!

61
Michael Myers

NumberFormat ist der Weg, aber Sie sollten sich der Besonderheiten bewusst sein, die auftauchen, wenn Ihre Daten weniger als 100% korrekt sind.

Ich fand das folgende nützlich:

http://www.ibm.com/developerworks/Java/library/j-numberformat/index.html

Wenn Ihre Eingaben vertrauenswürdig sind, müssen Sie sich keine Sorgen machen.

5
Jasper Floor

Sie verwenden einen NumberFormat. Hier ist ein Beispiel, das meiner Meinung nach richtig aussieht.

3
unwind

Nur Java lernen und programmieren. Hatte ähnliche Frage. Etwas in meinem Lehrbuch gefunden:

Scanner sc = new Scanner(string);
double number = sc.nextDouble();

In dem Buch heißt es, dass ein Scanner automatisch dekodiert, was sich in einem String-Variabel befindet, und dass die Scanner-Klasse sich automatisch an die Sprache des eingestellten Gebietsschemas anpasst, wobei Systemgebietsschema die Standardeinstellung ist, aber das lässt sich leicht auf etwas anderes einstellen.

Ich habe mein Problem auf diese Weise gelöst. Vielleicht könnte das für die obige Ausgabe funktionieren, anstatt zu parsen?

Zusatz: Der Grund, warum ich diese Methode mochte, war die Tatsache, dass ich bei Verwendung von Swing-Dialouge-Feldern für die Eingabe und beim Versuch, die Zeichenfolge in eine double-Anweisung mit parse umzuwandeln, eine NumberFormatException erhielt. Es stellte sich heraus, dass die Analyse ausschließlich die Formatierung in den USA verwendet, während der Scanner alle Formate verarbeiten kann. Der Scanner hat die Eingabe selbst mit dem Komma (,) als Dezimaltrennzeichen einwandfrei ausgeführt. Da die am meisten gewählte Antwort parse verwendet, sehe ich wirklich nicht, wie sie dieses spezielle Problem lösen würde. Sie müssen Ihre Zahlen im US-Format eingeben und sie dann in Ihr Locale-Format konvertieren. Das ist ziemlich unpraktisch, wenn das numerische Tastaturkürzel mit einem Komma versehen ist.

Jetzt kannst du mich alle in Stücke zerreißen;)

3
lytwaytLaz

Dies sollte kein Problem mit Java.text.DecimalFormat sein.

1
Roland Ewald

Verwenden Sie NumberFormat.getNumberInstance (Locale)

1
adrian.tarau

Wissen Sie, um welches Gebiet es sich handelt? Dann kannst du verwenden

DecimalFormat format = DecimalFormat.getInstance(theLocale);
format.parse(yourString);

dies funktioniert sogar für wissenschaftliche Notationen, Strings mit Prozentzeichen oder Strings mit Währungssymbolen.

0
Fortega