Pertanyaan Bagaimana cara mengonversi String ke Double di Java menggunakan lokal tertentu?


Saya ingin mengonversi beberapa angka yang saya dapatkan sebagai string menjadi Doubles, tetapi angka-angka ini tidak berada di lokal standar AS, tetapi dalam yang berbeda. Bagaimana saya bisa melakukannya?


35
2018-05-20 14:01


asal


Jawaban:


Mencoba java.text.NumberFormat. Dari Javadocs:

Untuk memformat nomor untuk Lokal yang berbeda, tentukan di panggilan untuk mendapatkanInstansi.

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

Anda juga dapat menggunakan NumberFormat untuk mengurai angka:

myNumber = nf.parse(myString);

parse() mengembalikan a Number; jadi untuk mendapatkan double, Anda harus menelepon myNumber.doubleValue():

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

Perhatikan itu parse() tidak akan pernah kembali null, jadi ini tidak dapat menyebabkan NullPointerException. Sebagai gantinya, parse melempar centang ParseException jika gagal.

Edit: Saya awalnya mengatakan bahwa ada cara lain untuk mengubahnya double: berikan hasilnya Double dan gunakan unboxing. Saya pikir itu karena contoh tujuan umum NumberFormat sedang digunakan (per Javadocs untuk getInstance), itu akan selalu mengembalikan Double. Tapi DJClayworth menunjukkan bahwa Javadocs untuk parse(String, ParsePosition) (Yang disebut oleh parse(String)) mengatakan bahwa a Long dikembalikan jika memungkinkan. Karena itu, casting hasilnya Double tidak aman dan tidak boleh dicoba!
Terima kasih, DJClayworth!


60
2018-05-20 14:04



NumberFormat adalah cara untuk pergi, tetapi Anda harus menyadari kekhasannya yang muncul ketika data Anda kurang dari 100% benar.

Saya menemukan manfaat berikut:

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

Jika masukan Anda dapat dipercaya, Anda tidak perlu khawatir tentang itu.


5
2018-05-20 14:17



Anda menggunakan NumberFormat. Sini adalah salah satu contoh, yang menurut saya terlihat benar.


3
2018-05-20 14:06



Baru belajar java dan pemrograman. Punya pertanyaan serupa. Menemukan sesuatu seperti ini di buku saya:

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

Buku ini mengatakan bahwa pemindai secara otomatis menerjemahkan apa yang ada dalam variabel String dan bahwa kelas Pemindai secara otomatis menyesuaikan dengan bahasa dari Lokal yang ditetapkan, sistem Lokal sebagai default, tetapi itu mudah untuk diatur ke sesuatu yang lain.

Saya memecahkan masalah saya dengan cara ini. Mungkin ini bisa bekerja untuk masalah di atas, bukan parsing?

Tambahan: Alasan saya menyukai metode ini adalah fakta bahwa ketika menggunakan kotak swing dialouge untuk input dan kemudian mencoba mengonversi string untuk menggandakan dengan parse saya mendapat NumberFormatException. Ternyata parse hanya menggunakan pemformatan angka AS sementara Pemindai dapat menangani semua format. Scanner membuat input bekerja dengan sempurna bahkan dengan koma (,) pemisah desimal. Karena jawaban yang paling banyak dipilih menggunakan parse saya benar-benar tidak melihat bagaimana itu akan memecahkan masalah khusus ini. Anda harus memasukkan nomor Anda dalam format AS dan kemudian mengonversinya ke format lokal Anda. Itu agak tidak nyaman ketika keybord numerik dilengkapi dengan koma.

Sekarang Anda semua bebas mencabik-cabik saya;)


3
2018-01-26 04:04



Seharusnya tidak ada masalah menggunakan java.text.DecimalFormat.


1
2018-05-20 14:05



Gunakan NumberFormat.getNumberInstance (Lokal)


1
2018-05-20 14:07



Apakah Anda tahu yang lokal itu? Maka Anda bisa menggunakannya

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

ini bahkan akan berfungsi untuk notasi ilmiah, string dengan tanda persentase atau string dengan simbol mata uang.


0
2018-05-20 14:11



Di sini adalah bagaimana Anda menggunakan parseDouble untuk mengonversi String ke a Double:

doubleExample.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader; 

public class doubleExample {

        public static void main(String[] args) {

                Double myDouble = new Double("0");
                System.out.println("Please enter a number:");

                try
                {
                        //get the number from console
                        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                        myDouble = Double.parseDouble(br.readLine());
                }
                //if invalid value was entered
                catch(NumberFormatException ne)
                {
                        System.out.println("Invalid value" + ne);
                        System.exit(0);
                }
    catch(IOException ioe)
                {
                        System.out.println("IO Error :" + ioe);
                        System.exit(0);
                }

                System.out.println("Double value is " + myDouble);
        }
}

-3
2017-10-09 13:54