Ubah String menjadi dua kali lipat di Jawa

286

Bagaimana saya bisa mengkonversi Stringseperti "12.34"ke doubledalam Java?

TinyBelly
sumber
1
Mereka tiga jawaban pada dasarnya hanya menduplikasi top-sebagai jawaban diposting beberapa tahun sebelumnya yakin memiliki banyak upvotes.
Bernhard Barker

Jawaban:

471

Anda dapat menggunakan Double.parseDouble()untuk mengonversi a Stringke double:

String text = "12.34"; // example String
double value = Double.parseDouble(text);

Untuk kasus Anda, sepertinya Anda inginkan:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());
WhiteFang34
sumber
jadi coding saya harus double total = Double.parseDouble (string) ;?
TinyBelly
4
@TinyBelly: ya sepertinya Anda inginkan:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34
1
@TinyBelly: Anda perlu mengekstrak bagian teks dari string yang ingin Anda parsing untuk double. Inilah salah satu cara Anda dapat melakukannya untuk kasus Anda, meskipun saya tidak dapat menjamin itu akan bekerja untuk semuanya: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- ini pada dasarnya menggantikan semua karakter yang bukan angka atau .tidak sama sekali, hanya menyisakan angka dan titik desimal untuk diuraikan.
WhiteFang34
4
tidak disarankan menggunakan penghitungan ganda untuk harga.
Bozho
2
Bagi mereka yang terpikat di sini saat mencari hasil kelas, Doublebukan doublepenggunaan tipe primitif Double.valueOf(String).
Pshemo
48

Jika Anda memiliki masalah dalam mem-parsing string ke nilai desimal, Anda perlu mengganti "," dalam angka menjadi "."


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );
TmRocha
sumber
2
Pilihan lain: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = DecimalFormatSymbols baru (); sfs.setDecimalSeparator (','); df.setDecimalFormatSymbols (sfs); df.parse (angka);
Robertiano
37

Untuk mengubah string kembali menjadi ganda, coba yang berikut ini

String s = "10.1";
Double d = Double.parseDouble(s);

Metode parseDouble akan mencapai efek yang diinginkan, dan begitu juga metode Double.valueOf ().

Alex Oczkowski
sumber
2
Tidak, String.valueOf (sesuatu) mengembalikan representasi String dari sesuatu: jika sesuatu adalah tipe bawaan atau jika itu adalah Objek dan itu adalah nol, jika tidak maka itu setara dengan someObject.toString (). Untuk mendapatkan Double dari sebuah String, kita harus melakukannya dengan cara sebaliknya seperti yang ditunjukkan pada jawaban lainnya (Double.valueOf (someString) mengembalikan Double, dan Double.parseDouble (someString) mengembalikan ganda).
Johann Petrak
36
double d = Double.parseDouble(aString);

Ini harus mengubah string aString menjadi d ganda.

Andreas Vinter-Hviid
sumber
aString mengacu pada apa? dapatkah saya membantu saya menjelaskan lebih lanjut?
TinyBelly
2
aString hanyalah sebuah string. Lebih khusus string yang ingin dikonversi menjadi angka.
Andreas Vinter-Hviid
30

Gunakan new BigDecimal(string). Ini akan menjamin perhitungan yang tepat nanti.

Sebagai aturan praktis - selalu gunakan BigDecimaluntuk perhitungan sensitif seperti uang.

Contoh:

String doubleAsString = "23.23";
BigDecimal price = new BigDecimal(doubleAsString);
BigDecimal total = price.plus(anotherPrice);
Bozho
sumber
20

Anda hanya perlu mengurai nilai String menggunakan Double

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);
Harshal Patil
sumber
14

Mengutip kutipan dari Robertiano di atas lagi - karena ini adalah versi adaptif yang paling fleksibel dan lokalisasi. Pantas mendapat posting penuh!

Pilihan lain:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();
JBWanscher
sumber
8
String double_string = "100.215";
Double double = Double.parseDouble(double_string);
Habibur Rahman Ovie
sumber
3

Inilah yang akan saya lakukan

    public static double convertToDouble(String temp){
       String a = temp;
       //replace all commas if present with no comma
       String s = a.replaceAll(",","").trim(); 
      // if there are any empty spaces also take it out.          
      String f = s.replaceAll(" ", ""); 
      //now convert the string to double
      double result = Double.parseDouble(f); 
    return result; // return the result
}

Misalnya Anda memasukkan String "4 55,63. 0" hasilnya akan menjadi angka ganda 45563.0

faisalsash
sumber
2

Penggunaan Double.parseDouble()tanpa try/catchblok di sekitarnya dapat menyebabkan potensi NumberFormatExceptionstring ganda input tidak sesuai dengan format yang valid.

Guava menawarkan metode utilitas untuk ini yang mengembalikan nullseandainya String Anda tidak dapat diuraikan.

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitive/Doubles.html#tryParse(java.lang.String)

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

Dalam runtime, input String yang salah menghasilkan nullditugaskan untukvalueDouble

DYS
sumber
"mengembalikan 0,0 jika String Anda tidak dapat diuraikan" - Javadoc tidak mendukung klaim itu.
Tom
@ Tom Ini mengembalikan nilai nol Jenis ganda yang dapat dikonversi menjadi 0,0 jenis ganda - DYS 13 detik yang lalu edit
DYS
1
Bisa, tetapi tidak secara otomatis dan cuplikan Anda gagal melakukannya.
Tom
1

Digunakan ini untuk mengubah nomor String menjadi dua kali lipat ketika Anda perlu int cukup mengkonversi tipe data dari num dan num2 ke int; mengambil semua case untuk string ganda dengan Eng: "Bader Qandeel"

public static double str2doubel(String str) {
    double num = 0;
    double num2 = 0;
    int idForDot = str.indexOf('.');
    boolean isNeg = false;
    String st;
    int start = 0;
    int end = str.length();

    if (idForDot != -1) {
        st = str.substring(0, idForDot);
        for (int i = str.length() - 1; i >= idForDot + 1; i--) {
            num2 = (num2 + str.charAt(i) - '0') / 10;
        }
    } else {
        st = str;
    }

    if (st.charAt(0) == '-') {
        isNeg = true;
        start++;
    } else if (st.charAt(0) == '+') {
        start++;
    }

    for (int i = start; i < st.length(); i++) {
        if (st.charAt(i) == ',') {
            continue;
        }
        num *= 10;
        num += st.charAt(i) - '0';
    }

    num = num + num2;
    if (isNeg) {
        num = -1 * num;
    }
    return num;
}
Ahmed M Bader El-Din
sumber
1
String s = "12.34";
double num = Double.valueOf(s);
Ranjith Alappadan
sumber
0

Anda dapat menggunakan double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
HussainOmer
sumber