Konwertowanie podwójnego na ciąg znaków

201

Nie jestem pewien, czy to ja, czy coś, ale mam problem z konwersją podwójnego ciągu na ciąg.

oto mój kod:

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

Czy robię coś złego, czy brakuje mi tutaj kroku?

NumberFormatExceptionPodczas próby konwersji tego pojawia się błąd .

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

Próbuję to zrobić w onTouchListener. Będę pisać więcej kodu, w zasadzie, gdy użytkownik dotknie pola edytuj, chcę, aby informacje wyliczyły wypełnienie pola edycyjnego.

Brandon Wilson
źródło
4
Wydaje mi się, że napotkałeś problem?
MByD,
2
czy to prawdziwy kod, który wykonujesz? te linie działają idealnie.
mcabral
1
Double.toString (double) nie może nawet wygenerować NumberFormatException - czy jesteś pewien, że wyjątek nie zostanie zgłoszony z innego miejsca?
Random832
1
Musi być coś jeszcze, to powinno działać dobrze. ideone.com/btGrv
Kevin
1
Pokaż stacktrace i cały kod
Bozho

Odpowiedzi:

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

Spowoduje to konwersję podwójnie na ciąg

Bhavit S. Sengar
źródło
22
pamiętaj o tym, jeśli suma = 1234567890123456, to ciąg staje się „1.234567890123456E15”, co bardzo często nie jest tym, czego chcesz
user1735824,
6
jakieś rozwiązanie dla jednego z nich?
Prashanth Debbadwar
6
@PrashanthDebbadwar Tak: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);następnie użyjtotal2 = fmt.format(total)
Andreas
To wewnętrzne połączenia Double.toString(). Nie jestem pewien, jak odpowiada na pytanie.
shmosel
23

Używając Double.toString (), jeśli liczba jest za mała lub za duża, otrzymasz notację naukową taką: 3.4875546345347673E-6. Istnieje kilka sposobów na większą kontrolę nad formatem ciągu wyjściowego.

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

Użycie String.format () będzie najlepszym wygodnym sposobem.

Nicholas Lu
źródło
14

Ten kod kompiluje się i działa dla mnie. Konwertuje podwójne na ciąg przy użyciu próbnych połączeń.

public class TestDouble {

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

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

Zastanawia mnie widok NumberFormatException. Spójrz na ślad stosu. Zgaduję, że masz inny kod, którego nie pokazano w twoim przykładzie, który powoduje zgłoszenie tego wyjątku.

ditkin
źródło
Zastanawia mnie widok NumberFormatException. Spójrz na ślad stosu. Zgaduję, że masz inny kod, którego nie pokazano w twoim przykładzie, który powoduje zgłoszenie tego wyjątku.
ditkin
1
Podobnie kod PO. Nie ma tu problemu do rozwiązania.
Brian Roach,
możliwe, próbuję to zrobić w onTouchListener. Będę pisać więcej kodu, w zasadzie, gdy użytkownik dotknie pola edytuj, chcę, aby informacje wyliczyły wypełnienie pola edycyjnego.
Brandon Wilson,
6

Wyjątek prawdopodobnie pochodzi od wywołań parseDouble (). Sprawdź, czy wartości podane dla tej funkcji naprawdę odzwierciedlają podwójne.

Stephan
źródło
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());

to działa. musi być powtarzalne.

agon
źródło
3

Kotlin

Możesz użyć .toStringbezpośrednio na dowolnym typie danych w kotlin, np

val d : Double = 100.00
val string : String = d.toString()
Khemraj
źródło
1
double total = 44;
String total2= new Double(total).toString();

ten kod działa

olyanren
źródło
3
Double.toString()połączenia, String.valueOf(double)które połączenia Double.toString(double). Szalony, co?
corsiKa
Podobnie kod PO. Nie ma tu problemu do rozwiązania.
Brian Roach,
2
@Muhammed - Możliwe ?? Tak właśnie działa
Brian Roach,
2
@Muhammed dobrze, tworzysz obiekt tylko po to, aby uzyskać jego wartość String. Gdyby to było w jakiejś pętli, można doświadczyć wielu dodatkowych (niepotrzebnych) kosztów ogólnych. Nie jestem wielkim fanem przedwczesnej optymalizacji, ale jestem fanem unikania oczywistych braków.
corsiKa
1
@Brian okey Rozumiem :) dziękuję. Masz rację, podobnie jak glowcoder
olyanren,
1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

Jednym z nich jest zgłoszenie wyjątku. Musisz dodać rejestrowanie / drukowanie, aby zobaczyć, co jest w volGalśrodku priceGal- i nie tak myślisz.

Brian Roach
źródło
Zmieniłem sumę na twardą liczbę, taką jak 44, i nadal dawał mi to błąd.
Brandon Wilson,
co „ogółem”? Twój oryginalny fragment kodu nie mógł zgłosić tego wyjątku. Dwa połączenia pokazane powyżej mogą. Jedna z twoich Stringnie jest prawidłową reprezentacją tego, doubledlatego otrzymujesz ten wyjątek.
Brian Roach,
Dla jasności; Double.toString(total); nie może zgłosić wyjątku. Zawsze. . Zmieniłeś to, na new Double(total).toString();co też nie możesz i jeśli zobaczysz tutaj odpowiedź, która została odrzucona, nie jest to coś, co kiedykolwiek chciałbyś zrobić.
Brian Roach,
ok, nie zmienię tego. Usunąłem ten mały fragment kodu z ontouchlistener i działało dobrze. ale gdy znajduje się w ontouchlistener, zgłasza błąd. Próbuję to zrobić w onTouchListener. Będę pisać więcej kodu, w zasadzie, gdy użytkownik dotknie pola edytuj, chcę, aby informacje wyliczyły wypełnienie pola edycyjnego.
Brandon Wilson,
1

double.toString()powinno działać. Nie typ zmiennej Double, ale sama zmienna double.

Matt F.
źródło
powinieneś wziąć pod uwagę, że czasami zwróci liczbę z notacją naukową E, taką jak -2.23561E5
Augustas,
0

Po prostu użyj następującego:

doublevalue+""; 

Będzie to działać dla dowolnego typu danych.

Przykład:

Double dd=10.09;
String ss=dd+"";
Rahul Purohit
źródło
7
Bardzo zły nawyk do nawarstwiania przez dodanie do pustego ciągu. Zamiast tego użyj dedykowanego
funtu
2
@ Michael.P dlaczego jest źle?
gab06
Robiłem to przez prawie cały mój czas jako programista Java LOL.
gab06
1
O ile nie ma w grze pewnej optymalizacji czasu kompilacji, wywołałoby to dodatkowy konstruktor i metodę dołączania.
dsmith
1
Zawsze używaj zamiast tego String.valueOf (dd). Będzie to również działać dla dowolnego typu danych.
BladeCoder,
0

Użyj StringBuilderklasy, tak jak:

StringBuilder meme = new StringBuilder(" ");

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

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

Otrzymasz pożądaną wydajność.

Abhishek Sheregar
źródło
0

Co powiesz na to, kiedy to zrobisz

totalCost.setText(tot);

Po prostu tak

totalCost.setText( "" + total );

Gdzie „” + <zmienna> automatycznie przekonwertuje ją na ciąg znaków

Francisco Azevedo
źródło
0

Pełne informacje

Możesz użyć String.valueOf () dla float, double, int, boolean itp.

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);
Khemraj
źródło
0

Istnieją trzy sposoby konwersji podwójnej na ciąg znaków .

  1. Double.toString (d)
  2. String.valueOf (d)
  3. „” + d

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

    }

Ciąg do podwojenia

  1. Double.parseDouble (str);
Neeraj Gahlawat
źródło