การแปลงสตริงเป็นสองเท่า


201

ฉันไม่แน่ใจว่าเป็นฉันหรืออะไร แต่ฉันมีปัญหาในการแปลงสายอักขระเป็นสองเท่า

นี่คือรหัสของฉัน:

double total = 44;
String total2 = Double.toString(total);

ฉันกำลังทำอะไรผิดหรือฉันพลาดขั้นตอนที่นี่

ฉันได้รับข้อผิดพลาดNumberFormatExceptionเมื่อพยายามแปลงนี้

totalCost.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    try {
      double priceG = Double.parseDouble(priceGal.getText().toString());
      double valG = Double.parseDouble(volGal.toString());
      double total = priceG * valG;
      String tot = new Double(total).toString();
      totalCost.setText(tot);
    } catch(Exception e) {
      Log.e("text", e.toString());
    }

    return false;
  }         
});

ฉันพยายามทำสิ่งนี้ใน onTouchListener ไม่โพสต์รหัสเพิ่มเติมโดยทั่วไปเมื่อผู้ใช้สัมผัสกล่อง edittext ฉันต้องการข้อมูลในการคำนวณเติมช่อง edittext


4
ดูเหมือนว่าดีสำหรับฉันคุณมีปัญหาอะไรบ้าง
MByD

2
เป็นรหัสจริงของคุณกำลังดำเนินการ? เส้นเหล่านั้นทำงานได้อย่างสมบูรณ์แบบ
mcabral

1
Double.toString (สองครั้ง) ไม่สามารถโยน NumberFormatException ได้ - คุณแน่ใจหรือไม่ว่าข้อยกเว้นไม่ได้ถูกโยนทิ้งจากที่อื่น
Random832

1
ต้องมีอย่างอื่นทำงานได้ดี ideone.com/btGrv
Kevin

1
แสดง stacktrace และรหัสทั้งหมด
Bozho

คำตอบ:


453
double total = 44;
String total2 = String.valueOf(total);

สิ่งนี้จะแปลง double เป็น String


22
มีดังต่อไปนี้ในใจถ้าทั้งหมด = 1234567890123456 แล้วสตริงจะกลายเป็น "1.234567890123456E15" ซึ่งมักจะไม่ใช่สิ่งที่คุณต้องการ
user1735824

6
ทางออกสำหรับข้างต้นใด ๆ
Prashanth Debbadwar

6
@PrashanthDebbadwar ใช่: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);ใช้แล้วtotal2 = fmt.format(total)
Andreas

Double.toString()นี้เรียกภายใน ไม่แน่ใจว่ามันตอบคำถามได้อย่างไร
shmosel

23

ใช้ Double.toString () ถ้าจำนวนน้อยเกินไปหรือใหญ่เกินไปคุณจะได้รับสัญกรณ์ทางวิทยาศาสตร์เช่นนี้: 3.4875546345347673E-6 มีหลายวิธีในการควบคุมรูปแบบสตริงเอาต์พุต

double num = 0.000074635638;
// use Double.toString()
System.out.println(Double.toString(num));
// result: 7.4635638E-5

// use String.format
System.out.println(String.format ("%f", num));
// result: 0.000075
System.out.println(String.format ("%.9f", num));
// result: 0.000074636

// use DecimalFormat
DecimalFormat decimalFormat = new DecimalFormat("#,##0.000000");
String numberAsString = decimalFormat.format(num);
System.out.println(numberAsString);
// result: 0.000075

ใช้ String.format () จะเป็นวิธีที่สะดวกที่สุด


14

รหัสนี้รวบรวมและใช้งานได้สำหรับฉัน มันจะแปลงสองครั้งเป็นสตริงโดยใช้สายที่คุณพยายาม

public class TestDouble {

    public static void main(String[] args) {
        double total = 44;
        String total2 = Double.toString(total);

        System.out.println("Double is " + total2);
    }
}

ฉันงงงวยเมื่อเห็น NumberFormatException ดูที่การติดตามสแต็ก ฉันเดาว่าคุณมีรหัสอื่นที่คุณไม่ได้แสดงในตัวอย่างของคุณที่ทำให้เกิดข้อยกเว้นนั้น


ฉันงงงวยเมื่อเห็น NumberFormatException ดูที่การติดตามสแต็ก ฉันเดาว่าคุณมีรหัสอื่นที่คุณไม่ได้แสดงในตัวอย่างของคุณที่ทำให้เกิดข้อยกเว้นนั้น
ditkin

1
ดังนั้นรหัสของ OP ไม่มีปัญหาที่นี่เพื่อแก้ไข
Brian Roach

เป็นไปได้ฉันพยายามทำสิ่งนี้ใน onTouchListener ไม่โพสต์รหัสเพิ่มเติมโดยทั่วไปเมื่อผู้ใช้สัมผัสกล่อง edittext ฉันต้องการข้อมูลในการคำนวณเติมช่อง edittext
Brandon Wilson

6

ข้อยกเว้นอาจมาจากการเรียก parseDouble () ตรวจสอบว่าค่าที่กำหนดให้กับฟังก์ชั่นนั้นสะท้อนถึงสองเท่าจริงๆ


3
double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

double priceG = Double.parseDouble(priceGal.getText().toString());

double valG = Double.parseDouble(volGal.toString());

มันได้ผล. จะต้องมีการทำซ้ำ


3

Kotlin

คุณสามารถใช้.toStringโดยตรงกับชนิดข้อมูลใด ๆ ใน kotlin เช่น

val d : Double = 100.00
val string : String = d.toString()

1
double total = 44;
String total2= new Double(total).toString();

รหัสนี้ใช้งานได้


3
Double.toString()สายที่โทรString.valueOf(double) Double.toString(double)บ้าเหรอ?
corsiKa

ดังนั้นรหัสของ OP ไม่มีปัญหาที่นี่เพื่อแก้ไข
Brian Roach

2
@ Muhammed - เป็นไปได้ ?? มันคือสิ่งที่มันทำ
Brian Roach

2
@Muhammed ดีคุณกำลังสร้างวัตถุเพียงเพื่อรับค่าสตริง หากสิ่งนี้อยู่ในรูปแบบใดแบบหนึ่งคุณอาจประสบกับค่าใช้จ่ายเพิ่มเติม (ไม่จำเป็น) จำนวนมาก ฉันไม่ใช่แฟนตัวยงของการเพิ่มประสิทธิภาพก่อนวัยอันควร แต่ฉันเป็นแฟนตัวยงของการหลีกเลี่ยงข้อบกพร่องที่ชัดเจน
corsiKa

1
@Brian ตกลงฉันเข้าใจ :) ขอบคุณ คุณมีสิทธิจึงไม่ glowcoder
olyanren

1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

หนึ่งในนั้นคือการโยนข้อยกเว้น คุณจำเป็นต้องเพิ่มการเข้าสู่ระบบบาง / การพิมพ์ที่จะเห็นสิ่งที่อยู่ในvolGalและpriceGal- มันไม่ใช่สิ่งที่คุณคิดว่า


ฉันเปลี่ยนจำนวนทั้งหมดเป็นจำนวนยากเช่น 44 และมันก็ยังทำให้ฉันมีข้อผิดพลาด
Brandon Wilson

"ทั้งหมด" คืออะไร? ข้อมูลโค้ดเดิมของคุณไม่สามารถยกเว้นได้ สองสายที่ฉันแสดงด้านบนสามารถ หนึ่งในStringนั้นไม่ใช่ตัวแทนที่ถูกต้องdoubleซึ่งเป็นสาเหตุที่คุณได้รับข้อยกเว้นนั้น
Brian Roach

ต้องมีความชัดเจน; Double.toString(total); ไม่สามารถโยนข้อยกเว้น เคย. . คุณเปลี่ยนสิ่งnew Double(total).toString();ที่ทำไม่ได้และหากคุณเห็นคำตอบที่นี่ซึ่งได้รับการโหวตลงมันไม่ใช่สิ่งที่คุณต้องการทำ
Brian Roach

ตกลงไม่ได้รับการเปลี่ยนแปลงที่ ฉันย้ายโค้ด litle bit ออกจาก ontouchlistener และทำงานได้ดี แต่เมื่อมันอยู่ในเครื่องมือสร้างรายได้มันจะพ่นข้อผิดพลาด ฉันพยายามทำสิ่งนี้ใน onTouchListener ไม่โพสต์รหัสเพิ่มเติมโดยทั่วไปเมื่อผู้ใช้สัมผัสกล่อง edittext ฉันต้องการข้อมูลในการคำนวณเติมช่อง edittext
Brandon Wilson

1

double.toString()ควรทำงาน. ไม่ได้เป็นชนิดตัวแปรแต่ตัวแปรของตัวเองDoubledouble


คุณควรพิจารณาว่าบางครั้งมันจะส่งคืนตัวเลขด้วยเครื่องหมายทางวิทยาศาสตร์ E เช่น -2.23561E5
Augustas

0

เพียงใช้สิ่งต่อไปนี้:

doublevalue+""; 

สิ่งนี้จะใช้ได้กับข้อมูลทุกประเภท

ตัวอย่าง:

Double dd=10.09;
String ss=dd+"";

7
นิสัยที่แย่มากที่จะทำให้เป็นสตริงโดยการเพิ่มในสตริงว่าง ใช้เฉพาะ JDK func แทน
StackHola

2
@ Michael.P ทำไมมันถึงไม่ดี
gab06

ฉันได้ทำเช่นนี้ตลอดเวลาของฉันเป็นโปรแกรมเมอร์ java lol
gab06

1
ถ้าไม่มีการคอมไพล์เวลาที่เหมาะสมมันจะเรียกตัวสร้างเพิ่มเติมและวิธีการผนวก
dsmith

1
ใช้ String.valueOf (dd) เสมอ สิ่งนี้จะใช้ได้กับชนิดข้อมูลใดก็ได้
BladeCoder

0

ใช้StringBuilderคลาสเช่น:

StringBuilder meme = new StringBuilder(" ");

// Convert and append your double variable
meme.append(String.valueOf(doubleVariable));

// Convert string builder to string
jTextField9.setText(meme.toString());

คุณจะได้ผลลัพธ์ที่ต้องการ


0

เมื่อคุณทำเช่นนั้น

totalCost.setText(tot);

คุณแค่ทำ

totalCost.setText( "" + total );

โดยที่ "" + <variable> จะแปลงเป็นสตริงโดยอัตโนมัติ


0

ข้อมูลที่สมบูรณ์

คุณสามารถใช้ String.valueOf () สำหรับ float, double, int, boolean เป็นต้น

double d = 0;
float f = 0;
int i = 0;
short i1 = 0;
char c = 0;
boolean bool = false;
char[] chars = {};
Object obj = new Object();


String.valueOf(d);
String.valueOf(i);
String.valueOf(i1);
String.valueOf(f);
String.valueOf(c);
String.valueOf(chars);
String.valueOf(bool);
String.valueOf(obj);

0

มีสามวิธีในการแปลงเป็นคู่สตริง

  1. Double.toString (ง)
  2. String.valueOf (ง)
  3. "" + d

    คลาสสาธารณะ DoubleToString {

    public static void main(String[] args) {
        double d = 122;
        System.out.println(Double.toString(d));
        System.out.println(String.valueOf(d));
        System.out.println(""+d);
    
    }

    }

สตริงที่สอง

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