Chuyển đổi chuỗi thành gấp đôi trong Java


Câu trả lời:


471

Bạn có thể sử dụng Double.parseDouble()để chuyển đổi Stringthành a double:

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

Đối với trường hợp của bạn, có vẻ như bạn muốn:

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

vì vậy mã hóa của tôi phải gấp đôi tổng = Double.parseDouble (chuỗi);?
TinyBelly

4
@TinyBelly: yeah có vẻ như bạn muốn:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34

1
@TinyBelly: bạn cần trích xuất một phần văn bản từ chuỗi mà bạn muốn phân tích cú pháp cho gấp đôi. Đây là một cách bạn có thể làm cho trường hợp của mình, mặc dù tôi không thể đảm bảo nó sẽ hoạt động cho mọi thứ: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- về cơ bản thay thế tất cả các ký tự không phải là số hoặc .không có gì, chỉ để lại số và dấu thập phân được phân tích cú pháp.
WhiteFang34

4
sử dụng gấp đôi để tính giá là không nên.
Bozho

2
Đối với những người bị dụ ở đây trong khi tìm kiếm kết quả của lớp Doublethay vì doublesử dụng kiểu nguyên thủy Double.valueOf(String).
Pshemo

48

Nếu bạn gặp vấn đề trong việc phân tích chuỗi thành giá trị thập phân, bạn cần thay thế "," trong số thành "."


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

2
Một tùy chọn khác: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = new DecimalFormatSymbols (); sfs.setDecimalSpayator (','); df.setDecimalFormatSymbols (sfs); df.parse (số);
Robertiano

37

Để chuyển đổi một chuỗi trở lại thành một đôi, hãy thử như sau

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

Phương thức parseDouble sẽ đạt được hiệu quả mong muốn và phương thức Double.valueOf () cũng vậy.


2
Không, String.valueOf (một cái gì đó) trả về một đại diện Chuỗi của một cái gì đó: nếu một cái gì đó là một loại tích hợp hoặc nếu nó là một Object và nó là null, nếu không thì nó tương đương với someObject.toString (). Để có được Double từ một chuỗi, người ta phải thực hiện theo cách khác như trong các câu trả lời khác (Double.valueOf (someString) trả về Double và Double.parseDouble (someString) trả về gấp đôi).
Johann Petrak

36
double d = Double.parseDouble(aString);

Điều này sẽ chuyển đổi chuỗi aString thành double d.


aString là để chỉ cái gì? bạn có thể giúp tôi giải thích thêm?
TinyBelly

2
aString chỉ là một chuỗi. Cụ thể hơn là chuỗi bạn muốn chuyển đổi thành một số.
Andreas Vinter-Hviid

30

Sử dụng new BigDecimal(string) . Điều này sẽ đảm bảo tính toán thích hợp sau này.

Như một quy tắc tự nhiên - luôn luôn sử dụng BigDecimal cho các tính toán nhạy cảm như tiền.

Thí dụ:

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

20

Bạn chỉ cần phân tích các giá trị Chuỗi bằng Double

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

14

Trích dẫn trích dẫn từ Robertiano ở trên một lần nữa - bởi vì đây là phiên bản thích ứng linh hoạt và bản địa hóa nhất. Nó xứng đáng một bài viết đầy đủ!

Một lựa chọn khác:

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



3

Đây là những gì tôi sẽ làm

    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
}

Ví dụ: bạn nhập Chuỗi "4 55,63. 0", đầu ra sẽ là số kép 45563.0


2

Sử dụng Double.parseDouble()mà không có try/catchkhối xung quanh có thể gây ra tiềm năngNumberFormatException có chuỗi kép đầu vào không tuân theo định dạng hợp lệ.

Quả ổi cung cấp một phương thức tiện ích cho phương thức này trả về nulltrong trường hợp Chuỗi của bạn không thể được phân tích cú pháp.

https://google.github.io/guava/release/19.0/api/docs/com/google/common/primologists/D đúp.html # tryPude (java.lang.String)

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

Trong thời gian chạy, đầu vào Chuỗi không đúng định dạng nullđược gán chovalueDouble


"trả về 0,0 trong trường hợp Chuỗi của bạn không thể được phân tích cú pháp" - Javadoc không hỗ trợ xác nhận đó.
Tom

@Tom Nó trả về giá trị null Loại kép có thể được chuyển đổi thành loại kép 0,0 - DYS 13 giây chỉnh sửa trước
DYS

1
Nó có thể, nhưng không tự động và đoạn trích của bạn không làm được điều đó.
Tom

1

Đã sử dụng điều này để chuyển đổi bất kỳ số Chuỗi nào thành gấp đôi khi bạn cần int chỉ cần chuyển đổi kiểu dữ liệu từ num và num2 sang int; lấy tất cả các trường hợp cho bất kỳ chuỗi kép nào với 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

Bạn có thể sử dụng double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.