Double in String konvertieren


200

Ich bin nicht sicher, ob ich es bin oder was, aber ich habe ein Problem beim Konvertieren eines Double in einen String.

Hier ist mein Code:

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

Mache ich etwas falsch oder verpasse ich hier einen Schritt?

NumberFormatExceptionBeim Versuch, dies zu konvertieren , wird eine Fehlermeldung angezeigt.

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

Ich versuche dies in einem onTouchListener zu tun. Ich werde mehr Code posten. Wenn der Benutzer das Edittext-Feld berührt, möchte ich, dass die Informationen das Edittext-Feld ausfüllen.


4
Scheint mir in Ordnung zu sein, auf welches Problem sind Sie gestoßen?
MByD

2
Ist das der echte Code, den Sie ausführen? Diese Linien funktionieren perfekt.
Mcabral

1
Double.toString (double) kann nicht einmal NumberFormatException auslösen - sind Sie sicher, dass die Ausnahme nicht von einem anderen Ort ausgelöst wird?
Random832

1
Es muss noch etwas anderes geben, das sollte gut funktionieren. ideone.com/btGrv
Kevin

1
Show Stacktrace und ganzen Code
Bozho

Antworten:


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

Dadurch wird double in String konvertiert


22
Beachten Sie Folgendes, wenn total = 1234567890123456, dann wird der String zu "1.234567890123456E15", was sehr oft nicht das ist, was Sie wollen
user1735824

6
irgendeine Lösung für oben?
Prashanth Debbadwar

6
@ PrashanthDebbadwar Ja: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);dann verwendentotal2 = fmt.format(total)
Andreas

Dies ruft intern auf Double.toString(). Ich bin mir nicht sicher, wie es die Frage beantwortet.
Shmosel

23

Wenn Sie mit Double.toString () zu klein oder zu groß sind, erhalten Sie eine wissenschaftliche Notation wie folgt: 3.4875546345347673E-6. Es gibt verschiedene Möglichkeiten, das Format der Ausgabezeichenfolge besser zu steuern.

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

Die Verwendung von String.format () ist der bequemste Weg.


14

Dieser Code kompiliert und funktioniert für mich. Mit den von Ihnen versuchten Aufrufen wird ein Double in einen String konvertiert.

public class TestDouble {

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

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

Ich bin verwirrt darüber, dass Sie die NumberFormatException sehen. Schauen Sie sich die Stapelverfolgung an. Ich vermute, Sie haben anderen Code, den Sie in Ihrem Beispiel nicht anzeigen, wodurch diese Ausnahme ausgelöst wird.


Ich bin verwirrt darüber, dass Sie die NumberFormatException sehen. Schauen Sie sich die Stapelverfolgung an. Ich vermute, Sie haben anderen Code, den Sie in Ihrem Beispiel nicht anzeigen, wodurch diese Ausnahme ausgelöst wird.
Ditkin

1
Der OP-Code auch. Hier ist kein Problem zu lösen.
Brian Roach

Möglicherweise versuche ich dies in einem onTouchListener zu tun. Ich werde mehr Code posten. Wenn der Benutzer das Edittext-Feld berührt, möchte ich, dass die Informationen das Edittext-Feld ausfüllen.
Brandon Wilson

6

Die Ausnahme kommt wahrscheinlich von den parseDouble () -Aufrufen. Überprüfen Sie, ob die für diese Funktion angegebenen Werte wirklich ein Doppel widerspiegeln.


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

Es klappt. muss sich wiederholen.


3

Kotlin

Sie können .toStringdirekt auf jeden Datentyp in Kotlin verwenden, wie z

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

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

Dieser Code funktioniert


3
Double.toString()ruft String.valueOf(double)welche Anrufe an Double.toString(double). Verrückt, was?
CorsiKa

Der Code des OP auch. Hier ist kein Problem zu lösen.
Brian Roach

2
@ Muhammed - Möglich? Es ist, was es tut
Brian Roach

2
@ Muhammad gut, Sie erstellen ein Objekt, nur um seinen String-Wert zu erhalten. Wenn dies in einer Schleife wäre, könnten Sie viel zusätzlichen (unnötigen) Aufwand verursachen. Ich bin kein großer Fan von vorzeitiger Optimierung, aber ich bin ein Fan von der Vermeidung offensichtlicher Mängel.
CorsiKa

1
@ Brian okey Ich verstehe :) Danke. Sie haben Recht, ebenso wie Glowcoder
Olyanren

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

Eine davon ist die Ausnahme. Sie müssen etwas Protokollierung / Druck hinzufügen, um zu sehen, was drin ist volGalund priceGal- es ist nicht das, was Sie denken.


Ich habe die Summe auf eine harte Zahl wie 44 geändert und es gab mir immer noch einen Fehler.
Brandon Wilson

was "total"? Ihr ursprünglicher Code-Snippit konnte diese Ausnahme nicht auslösen. Die beiden Anrufe, die ich oben zeige, können. Eines Ihrer Strings ist keine gültige Darstellung von a double, weshalb Sie diese Ausnahme erhalten.
Brian Roach

Deutlich sein; Double.toString(total); kann keine Ausnahme auslösen. Je. . Sie haben das geändert, new Double(total).toString();was auch nicht möglich ist, und wenn Sie hier die Antwort sehen, die abgelehnt wurde, ist dies nichts, was Sie jemals tun möchten.
Brian Roach

ok, ich werde das ändern. Ich habe dieses kleine Stück Code aus dem Ontouchlistener entfernt und es hat gut funktioniert. aber wenn es im ontouchlistener ist, wird der Fehler ausgegeben. Ich versuche dies in einem onTouchListener zu tun. Ich werde mehr Code posten. Wenn der Benutzer das Edittext-Feld berührt, möchte ich, dass die Informationen das Edittext-Feld ausfüllen.
Brandon Wilson

1

double.toString()sollte arbeiten. Nicht der Variablentyp Double, sondern die Variable selbst double.


Sie sollten bedenken, dass es manchmal eine Nummer mit E-Notation wie -2.23561E5
Augustas

0

Verwenden Sie einfach Folgendes:

doublevalue+""; 

Dies funktioniert für jeden Datentyp.

Beispiel:

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

7
Sehr schlechte Angewohnheit, durch Hinzufügen zu einem leeren String zu stringifizieren. Verwenden Sie stattdessen dedizierte JDK-Funktionen
StackHola

2
@ Michael.P warum ist es schlecht?
gab06

Ich mache das wie meine ganze Zeit als Java-Programmierer lol.
gab06

1
Sofern keine Optimierung zur Kompilierungszeit durchgeführt wird, wird ein zusätzlicher Konstruktor und eine Append-Methode aufgerufen.
Schmied

1
Verwenden Sie stattdessen immer String.valueOf (dd). Dies funktioniert auch für jeden Datentyp.
BladeCoder

0

Verwenden Sie StringBuilderKlasse wie folgt:

StringBuilder meme = new StringBuilder(" ");

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

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

Sie erhalten die gewünschte Ausgabe.


0

Wie wäre es, wenn Sie das tun

totalCost.setText(tot);

Du tust es einfach

totalCost.setText( "" + total );

Wobei das "" + <Variable> es automatisch in einen String konvertiert


0

Vollständige Info

Sie können String.valueOf () für float, double, int, boolean usw. verwenden.

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

Es gibt drei Möglichkeiten, double in String umzuwandeln .

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

    öffentliche Klasse 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);
    
    }

    }}

String zum Verdoppeln

  1. Double.parseDouble (str);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.