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


201

Tôi không chắc đó là tôi hay gì nhưng tôi đang gặp vấn đề khi chuyển đổi chuỗi kép thành chuỗi.

đây là mã của tôi:

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

Tôi đang làm gì đó sai hay tôi đang thiếu một bước ở đây.

Tôi gặp lỗi NumberFormatExceptionkhi cố gắng chuyển đổi này.

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

Tôi đang cố gắng làm điều này trong một onTouchListener. Ill đăng thêm mã, về cơ bản khi người dùng chạm vào hộp edittext tôi muốn thông tin để tính toán điền vào hộp edittext.


4
Có vẻ tốt với tôi, bạn đã gặp vấn đề gì?
MByD

2
Đó có phải là mã thực sự mà bạn đang thực thi? những dòng hoạt động hoàn hảo.
mcabral

1
Double.toString (gấp đôi) thậm chí không thể ném NumberFormatException - bạn có chắc chắn ngoại lệ không bị ném từ nơi khác không?
Random832

1
Phải có một cái gì đó khác, điều này sẽ làm việc tốt. ideone.com/btGrv
Kevin

1
Hiển thị stacktrace và toàn bộ mã
Bozho

Câu trả lời:


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

Điều này sẽ chuyển đổi gấp đôi thành Chuỗi


22
Hãy ghi nhớ những điều sau nếu tổng = 1234567890123456 thì Chuỗi trở thành "1.234567890123456E15" thường không như bạn muốn
dùng175824

6
giải pháp nào cho một ở trên?
Prashanth Debbadwar

6
@PrashanthDebbadwar Có: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);sau đó sử dụngtotal2 = fmt.format(total)
Andreas

Điều này gọi nội bộ Double.toString(). Không chắc làm thế nào nó trả lời câu hỏi.
shmosel

23

Sử dụng Double.toString (), nếu số quá nhỏ hoặc quá lớn, bạn sẽ nhận được một ký hiệu khoa học như sau: 3.4875546345347673E-6. Có một số cách để có nhiều quyền kiểm soát định dạng chuỗi đầu ra.

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

Sử dụng String.format () sẽ là cách thuận tiện nhất.


14

Mã này biên dịch và làm việc cho tôi. Nó chuyển đổi một chuỗi thành một chuỗi bằng các cuộc gọi bạn đã thử.

public class TestDouble {

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

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

Tôi bối rối khi bạn nhìn thấy NumberFormatException. Nhìn vào dấu vết ngăn xếp. Tôi đoán bạn có mã khác mà bạn không hiển thị trong ví dụ của mình đang khiến ngoại lệ đó bị ném.


Tôi bối rối khi bạn nhìn thấy NumberFormatException. Nhìn vào dấu vết ngăn xếp. Tôi đoán bạn có mã khác mà bạn không hiển thị trong ví dụ của mình đang khiến ngoại lệ đó bị ném.
ditkin

1
Mã của OP cũng vậy. Không có vấn đề nào ở đây để giải quyết.
Brian Roach

có thể, tôi đang cố gắng làm điều này trong một onTouchListener. Ill đăng thêm mã, về cơ bản khi người dùng chạm vào hộp edittext tôi muốn thông tin để tính toán điền vào hộp edittext.
Brandon Wilson

6

Ngoại lệ có lẽ đến từ các cuộc gọi parseDouble (). Kiểm tra xem các giá trị được cung cấp cho hàm đó thực sự phản ánh gấp đôi.


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

nó hoạt động phải lặp đi lặp lại


3

Kotlin

Bạn có thể sử dụng .toStringtrực tiếp trên mọi loại dữ liệu trong kotlin, như

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

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

mã này hoạt động


3
Double.toString()các cuộc gọi String.valueOf(double)mà gọi Double.toString(double). Điên chưa
corsiKa

Mã của OP cũng vậy. Không có vấn đề nào ở đây để giải quyết.
Brian Roach

2
@Muhammed - Có thể ?? Đó là những gì nó làm
Brian Roach

2
@Muhammed tốt, bạn đang tạo một đối tượng chỉ để nhận giá trị Chuỗi của nó. Nếu đây là một vòng lặp của một số loại, bạn có thể trải nghiệm rất nhiều chi phí bổ sung (không cần thiết). Tôi không phải là một fan hâm mộ lớn của tối ưu hóa sớm, nhưng tôi là một người hâm mộ để tránh những thiếu sót rõ ràng.
corsiKa

1
@Brian okey Tôi hiểu :) cảm ơn bạn. Bạn nói đúng, glowcoder cũng vậy
olyanren

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

Một trong số đó là ném ngoại lệ. Bạn cần thêm một số ghi nhật ký / in để xem những gì trong volGalpriceGal- đó không phải là những gì bạn nghĩ.


Tôi đã thay đổi tổng số thành một số cứng như 44 và nó vẫn báo lỗi.
Brandon Wilson

"tổng" là gì? Đoạn mã gốc của bạn không thể ném ngoại lệ đó. Hai cuộc gọi tôi hiển thị ở trên có thể. Một trong những Stringkhông phải là đại diện hợp lệ của bạn double, đó là lý do tại sao bạn nhận được ngoại lệ đó.
Brian Roach

Để rõ ràng; Double.toString(total); không thể ném một ngoại lệ. Không bao giờ. . Bạn đã thay đổi điều đó thành new Double(total).toString();không thể và nếu bạn thấy câu trả lời ở đây đã được bỏ phiếu thì đó không phải là điều bạn từng muốn làm.
Brian Roach

ok bệnh nhận được mà thay đổi. Tôi đã chuyển đoạn mã đó ra khỏi ontouchlistener và nó hoạt động tốt. nhưng khi nó ở trong ontouchlistener thì nó sẽ báo lỗi. Tôi đang cố gắng làm điều này trong một onTouchListener. Ill đăng thêm mã, về cơ bản khi người dùng chạm vào hộp edittext tôi muốn thông tin để tính toán điền vào hộp edittext.
Brandon Wilson

1

double.toString()nên làm việc. Không phải kiểu biến Double, mà là biến double.


bạn nên cân nhắc rằng đôi khi nó sẽ trả về số có ký hiệu khoa học E như -2.23561E5
Augustas

0

Chỉ cần sử dụng như sau:

doublevalue+""; 

Điều này sẽ làm việc cho bất kỳ loại dữ liệu.

Thí dụ:

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

7
Thói quen rất xấu để xâu chuỗi bằng cách thêm vào một Chuỗi trống. Sử dụng func JDK chuyên dụng thay thế
StackHola

2
@ Michael.P tại sao nó xấu?
gab06

Tôi đã làm điều này trong suốt thời gian làm lập trình viên java lol.
gab06

1
Trừ khi có một số tối ưu hóa thời gian biên dịch khi chơi, nó sẽ gọi một phương thức bổ sung và phương thức bổ sung.
thợ rèn

1
Luôn luôn sử dụng String.valueOf (dd). Điều này cũng sẽ làm việc cho bất kỳ loại dữ liệu.
BladeCoder

0

Sử dụng StringBuilderlớp, như vậy:

StringBuilder meme = new StringBuilder(" ");

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

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

Bạn sẽ có được đầu ra mong muốn.


0

Làm thế nào về khi bạn làm

totalCost.setText(tot);

Bạn chỉ cần làm

totalCost.setText( "" + total );

Trong đó "" + <biến> sẽ tự động chuyển nó thành chuỗi


0

Thông tin đầy đủ

Bạn có thể sử dụng String.valueOf () cho float, double, int, boolean, v.v.

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

Có ba cách để chuyển đổi gấp đôi thành Chuỗi .

  1. Double.toString (d)
  2. Chuỗi.valueOf (d)
  3. "" + D

    lớp công khai 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);
    
    }

    }

Chuỗi gấp đôi

  1. Double.parseDouble (str);
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.