Ubah String menjadi dua kali lipat di Jawa


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());

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(",",".") );

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 ().


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.


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);

20

Anda hanya perlu mengurai nilai String menggunakan Double

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);

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();



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


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


"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;
}


0

Anda dapat menggunakan double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.