แปลง String เป็นสองเท่าใน Java


286

ฉันสามารถแปลงStringเช่น"12.34"ไปdoubleใน Java?


1
บรรดา สาม คำตอบเป็นเพียงการทำซ้ำบนลงมติคำตอบโพสต์ไม่กี่ปีก่อนหน้านี้แน่ใจว่าจะมีจำนวนมากของ upvotes
Bernhard Barker

คำตอบ:


471

คุณสามารถใช้Double.parseDouble()เพื่อแปลง a Stringเป็นdouble:

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

สำหรับกรณีของคุณดูเหมือนว่าคุณต้องการ:

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

ดังนั้นการเข้ารหัสของฉันควรจะเป็น double double = Double.parseDouble (string) ;?
TinyBelly

4
@TinyBelly: ใช่ดูเหมือนว่าคุณต้องการ:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34

1
@TinyBelly: คุณต้องแยกส่วนของข้อความจากสตริงที่คุณต้องการแยกวิเคราะห์สำหรับ double นี่เป็นวิธีหนึ่งที่คุณสามารถทำได้สำหรับกรณีของคุณแม้ว่าฉันจะไม่สามารถรับประกันได้ว่ามันจะใช้ได้กับทุกสิ่ง: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- โดยทั่วไปแล้วมันจะแทนที่ตัวละครทุกตัวที่ไม่ใช่ตัวเลขหรือ.ไม่มีอะไรเลยเหลือเพียงตัวเลขและจุดทศนิยมที่แยกวิเคราะห์
WhiteFang34

4
ไม่แนะนำให้ใช้การคำนวณสองครั้งในการคำนวณราคา
Bozho

2
สำหรับผู้ที่ล่อที่นี่ขณะที่การค้นหาผลของการเรียนDoubleแทนชนิดดั้งเดิมใช้double Double.valueOf(String)
Pshemo

48

หากคุณมีปัญหาในการแยกสตริงเป็นค่าทศนิยมคุณต้องแทนที่ "," ในตัวเลขเป็น "."


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

2
ตัวเลือกอื่น: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = ใหม่ DecimalFormatSymbols (); sfs.setDecimalSeparator ( ''); df.setDecimalFormatSymbols (SFS); df.parse (จำนวน);
Robertiano

37

ในการแปลงสตริงกลับเป็นคู่ให้ลองทำดังต่อไปนี้

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

วิธี parseDouble จะบรรลุผลที่ต้องการและวิธี Double.valueOf () จะ


2
ไม่ String.valueOf (บางสิ่งบางอย่าง) ส่งคืนการแทนค่าสตริงของบางสิ่ง: หากบางสิ่งบางอย่างเป็นชนิดในตัวหรือถ้าเป็นวัตถุและมันเป็นโมฆะมิฉะนั้นจะเทียบเท่ากับ someObject.toString () ในการรับค่า Double จาก String ค่าหนึ่งจะต้องทำวิธีอื่น ๆ ดังที่แสดงในคำตอบอื่น ๆ (Double.valueOf (someString) จะส่งกลับค่า Double และ Double.parseDouble (someString) จะส่งกลับค่า double)
โยฮันน์ Petrak

36
double d = Double.parseDouble(aString);

สิ่งนี้ควรแปลงสตริง aString เป็น double d


aString หมายถึงอะไร คุณช่วยอธิบายเพิ่มเติมได้ไหม
TinyBelly

2
aString เป็นเพียงสตริง โดยเฉพาะอย่างยิ่งสตริงที่คุณต้องการแปลงเป็นตัวเลข
Andreas Vinter-Hviid

30

ใช้ new BigDecimal(string)ใช้สิ่งนี้จะรับประกันการคำนวณที่เหมาะสมในภายหลัง

เป็นกฎง่ายๆ - ใช้เสมอ BigDecimalสำหรับการคำนวณที่ละเอียดอ่อนเช่นเงิน

ตัวอย่าง:

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

20

คุณจะต้องแยกวิเคราะห์ค่าสตริงโดยใช้ Double

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

14

อ้างถึงคำพูดจาก Robertiano ข้างต้นอีกครั้ง - เพราะนี่เป็นเวอร์ชั่นที่ปรับตัวได้หลากหลายที่สุดและรองรับหลายภาษา มันสมควรได้รับโพสต์แบบเต็ม!

ตัวเลือกอื่น:

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


4

มีวิธีอื่นเช่นกัน

Double temp = Double.valueOf(str);
number = temp.doubleValue();

Double เป็นคลาสและ "temp" เป็นตัวแปร "number" เป็นหมายเลขสุดท้ายที่คุณต้องการ


1
คุณสามารถกำหนด Double ให้เป็น double จาก Java 5 เป็นต้นไปด้วยการ autoboxing / unboxing ที่เกี่ยวข้อง: Double.parseDouble (string) และ Double.valueOf (สตริง) แตกต่างกันอย่างไร
Bernhard Barker

3

นี่คือสิ่งที่ฉันจะทำ

    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
}

ตัวอย่างเช่นคุณป้อนสตริง "4 55,63. 0" ผลลัพธ์จะเป็นเลขคู่ 45563.0


2

การใช้งานDouble.parseDouble()โดยไม่มีtry/catchบล็อกล้อมรอบอาจทำให้เกิดศักยภาพได้NumberFormatExceptionได้ที่สตริงอินพุตคู่จะไม่สอดคล้องกับรูปแบบที่ถูกต้อง

Guava เสนอวิธีการยูทิลิตี้สำหรับการส่งคืนซึ่งnullในกรณีที่สตริงของคุณไม่สามารถแยกวิเคราะห์

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

ในรันไทม์การป้อนค่าสตริงที่ไม่ถูกต้องจะnullได้รับมอบหมายvalueDouble


"ส่งคืน 0.0 ในกรณีที่สตริงของคุณไม่สามารถแยกวิเคราะห์" - Javadoc ไม่สนับสนุนการอ้างสิทธิ์นั้น
Tom

@Tom มันส่งกลับค่า null ประเภทคู่ซึ่งสามารถแปลงเป็น 0.0 ประเภทคู่ - DYS 13 วินาทีที่ผ่านมาแก้ไข
DYS

1
สามารถทำได้ แต่ไม่ใช่อัตโนมัติและข้อมูลโค้ดของคุณไม่สามารถทำเช่นนั้นได้
Tom

1

ใช้สิ่งนี้เพื่อแปลงหมายเลข String ใด ๆ เป็นสองเท่าเมื่อคุณต้องการ int เพียงแค่แปลงชนิดข้อมูลจาก num และ num2 เป็น int; เอาทุกกรณีสำหรับสตริงใด ๆ ที่มี 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;
}


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.