Java'da String'i ikiye dönüştür


Yanıtlar:


471

Sen kullanabilirsiniz Double.parseDouble()bir dönüştürmek için Stringbir için double:

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

Durumunuz için istediğiniz gibi görünüyor:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());

kodlamam iki kat fazla olmalı = Double.parseDouble (string) ;?
TinyBelly

4
@TinyBelly: evet istediğiniz gibi görünüyor:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34

1
@TinyBelly: metnin bir kısmını çift için ayrıştırmak istediğiniz dizeden ayıklamanız gerekir. Durumunuz için bunu yapmanın bir yolu var, ancak her şey için çalışacağını garanti edemiyorum: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- bu temelde bir sayı veya .hiçbir şey olmayan tüm karakterlerin yerini alır ve yalnızca sayı ve ondalık noktasını ayrıştırır.
WhiteFang34

4
fiyat hesaplamaları için double kullanılması önerilmez.
Bozho

2
Doubleİlkel tip doublekullanım yerine sınıf sonucunu ararken burada çekenler için Double.valueOf(String).
Pshemo

48

Dizeyi ondalık değerlere ayrıştırmada sorun yaşıyorsanız, sayıdaki "," yerine "."


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );

2
Başka bir seçenek: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = yeni DecimalFormatSymbols (); sfs.setDecimalSeparator ( ''); df.setDecimalFormatSymbols (SFS); df.parse (sayı);
Robertiano

37

Bir dizeyi tekrar ikiye dönüştürmek için aşağıdakileri deneyin

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

ParseDouble yöntemi istenen efekti ve Double.valueOf () yöntemini elde eder.


2
Hayır, String.valueOf (bir şey) bir şeyin Dize temsilini döndürür: bir şey yerleşik bir türse veya bir Nesne ise ve null ise, aksi takdirde someObject.toString () öğesine eşdeğerdir. Bir String'den bir Double almak için, diğer cevaplarda gösterildiği gibi bunu yapmak gerekir (Double.valueOf (someString) bir Double döndürür ve Double.parseDouble (someString) bir double döndürür).
Johann Petrak

36
double d = Double.parseDouble(aString);

Bu, aString dizesini d çiftine dönüştürmelidir.


aString ne olduğuna bakın? daha fazla açıklamama yardım edebilir misin?
TinyBelly

2
aString sadece bir dizedir. Daha spesifik olarak, bir sayıya dönüştürmek istediğiniz dize.
Andreas Vinter-Hviid

30

Kullanın new BigDecimal(string). Bu, daha sonra doğru hesaplamayı garanti edecektir.

Genel bir kural olarak - her zaman BigDecimalpara gibi hassas hesaplamalar için kullanın .

Misal:

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

20

Dize değerlerini yalnızca Double kullanarak ayrıştırmanız gerekir

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

14

Robertiano'dan alıntıya tekrar atıfta bulunmak - çünkü bu çok yönlü ve yerelleştirmeye uyarlanmış versiyon. Tam bir yazıyı hak ediyor!

Başka seçenek:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();



3

Yapacağım şey bu

    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
}

Örneğin, "4 55,63. 0" dizesini girersiniz, çıkış 45563.0 değerinin iki katı olur


2

Double.parseDouble()Çevreleyen try/catchblok olmadan kullanmak NumberFormatException, giriş çift dizesinin geçerli bir biçime uymamasına neden olabilir .

Guava, nullbunun için Dizenizin ayrıştırılamaması durumunda dönen bir yardımcı yöntem sunar .

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

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

Çalışma zamanında, bozuk dize giriş yapılması sonucunda elde nulltahsisvalueDouble


" Dizenizin ayrıştırılamaması durumunda 0,0 döndürür" - Javadoc bu hak talebini desteklemez.
Tom

@Tom Boş değer döndürüyor Çift tip 0.0 dönüştürülebilir Çift tip - DYS 13 saniye önce değiştir
DYS

1
Olabilir, ancak otomatik olarak olmaz ve snippet'iniz bunu başaramaz.
Tom

1

U int gerektiğinde herhangi bir Dize numarasını ikiye dönüştürmek için bu sadece num ve num2 veri türünü int dönüştürmek için kullanılır; Eng ile herhangi bir dize çift için tüm davaları aldı: "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

Double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.