Conversione del doppio in stringa


202

Non sono sicuro che sia io o cosa, ma sto riscontrando un problema nel convertire un doppio in stringa.

ecco il mio codice:

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

Sto facendo qualcosa di sbagliato o mi manca un passaggio qui.

Viene visualizzato un errore NumberFormatExceptiondurante il tentativo di conversione.

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

Sto provando a farlo in un onTouchListener. Pubblicherò più codice, fondamentalmente quando l'utente tocca la casella edittext voglio che le informazioni calcolino un riempimento della casella edittext.


4
Mi sembra bene, che problema hai riscontrato?
MByD,

2
è questo il vero codice che stai eseguendo? quelle linee funzionano perfettamente.
martedì

1
Double.toString (double) non può nemmeno generare NumberFormatException - sei sicuro che l'eccezione non venga generata da qualche altra parte?
Casuale 832,

1
Ci deve essere qualcos'altro, questo dovrebbe funzionare bene. ideone.com/btGrv
Kevin,

1
Mostra stacktrace e codice intero
Bozho,

Risposte:


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

Questo convertirà il doppio in String


22
tenere presente quanto segue se total = 1234567890123456, la stringa diventa "1.234567890123456E15" che molto spesso non è ciò che si desidera
user1735824

6
qualche soluzione per sopra uno?
Prashanth Debbadwar,

6
@PrashanthDebbadwar Sì: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);quindi usatotal2 = fmt.format(total)
Andreas il

Questo chiama internamente Double.toString(). Non sono sicuro di come risponda alla domanda.
shmosel,

24

Usando Double.toString (), se il numero è troppo piccolo o troppo grande, otterrai una notazione scientifica come questa: 3.4875546345347673E-6. Esistono diversi modi per avere un maggiore controllo del formato della stringa di output.

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

Utilizzare String.format () sarà il modo più conveniente.


14

Questo codice viene compilato e funziona per me. Converte un doppio in una stringa usando le chiamate che hai provato.

public class TestDouble {

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

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

Sono perplesso nel vedere il NumberFormatException. Guarda la traccia dello stack. Immagino che tu abbia un altro codice che non stai mostrando nel tuo esempio che sta causando l'eccezione.


Sono perplesso nel vedere il NumberFormatException. Guarda la traccia dello stack. Immagino che tu abbia un altro codice che non stai mostrando nel tuo esempio che sta causando l'eccezione.
ditkin,

1
Lo stesso vale per il codice OP. Non c'è un problema qui da risolvere.
Brian Roach,

possibile, sto provando a farlo in un onTouchListener. Pubblicherò più codice, fondamentalmente quando l'utente tocca la casella edittext voglio che le informazioni calcolino un riempimento della casella edittext.
Brandon Wilson,

6

L'eccezione probabilmente deriva dalle chiamate parseDouble (). Controlla che i valori dati a quella funzione riflettano davvero un doppio.


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

Funziona. deve essere ripetitivo.


3

Kotlin

È possibile utilizzare .toStringdirettamente su qualsiasi tipo di dati in kotlin, come

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

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

questo codice funziona


3
Double.toString()chiama String.valueOf(double)quale chiama Double.toString(double). Pazzo, eh?
corsiKa

Lo stesso vale per il codice OP. Non c'è un problema qui da risolvere.
Brian Roach,

2
@Muhammed - Possible ?? È quello che fa
Brian Roach,

2
@Muhammed, stai creando un oggetto solo per ottenere il suo valore String. Se questo fosse in un ciclo di qualche tipo, potresti sperimentare un sacco di costi aggiuntivi (non necessari). Non sono un grande fan dell'ottimizzazione prematura, ma sono un fan di evitare ovvie carenze.
corsiKa

1
@Brian okey ho capito :) grazie. Hai ragione, così fa glowcoder
olyanren il

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

Uno di questi sta gettando l'eccezione. Devi aggiungere un po 'di registrazione / stampa per vedere cosa c'è dentro volGale priceGal- non è quello che pensi.


Ho cambiato il totale in un numero fisso come 44 e mi ha ancora dato un errore.
Brandon Wilson,

quale "totale"? Lo snippit di codice originale non ha potuto generare tale eccezione. Le due chiamate che mostro sopra possono. Uno dei tuoi Stringnon è una rappresentazione valida di un doublemotivo per cui stai ottenendo tale eccezione.
Brian Roach,

Per essere chiari; Double.toString(total); non è possibile generare un'eccezione. Mai. . Hai cambiato ciò a new Double(total).toString();cui anche non puoi e se vedi la risposta qui che è stata votata, non è qualcosa che vorresti mai fare.
Brian Roach,

ok, ottengo che sia cambiato. Ho spostato quel po 'di codice dall'ontouchlistener e ha funzionato bene. ma quando si trova nell'ontouchlistener genera l'errore. Sto provando a farlo in un onTouchListener. Pubblicherò più codice, fondamentalmente quando l'utente tocca la casella edittext voglio che le informazioni calcolino un riempimento della casella edittext.
Brandon Wilson,

1

double.toString()dovrebbe funzionare. Non il tipo di variabile Double, ma la variabile stessa double.


dovresti considerare che a volte restituirà il numero con la notazione scientifica E come -2.23561E5
Augustas

0

Basta usare quanto segue:

doublevalue+""; 

Questo funzionerà per qualsiasi tipo di dati.

Esempio:

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

7
Una pessima abitudine da stringere aggiungendo a una stringa vuota. Usa invece la funzione JDK dedicata
StackHola,

2
@ Michael.P perché è male?
gab06,

Lo sto facendo da sempre come programmatore java lol.
gab06,

1
A meno che non ci sia qualche ottimizzazione in fase di compilazione in gioco, chiamerebbe un costruttore aggiuntivo e un metodo append.
dsmith,

1
Utilizzare sempre String.valueOf (dd) invece. Questo funzionerà anche per qualsiasi tipo di dati.
BladeCoder,

0

Usa la StringBuilderclasse, in questo modo:

StringBuilder meme = new StringBuilder(" ");

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

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

Otterrai l'output desiderato.


0

Che ne dici di quando fai il

totalCost.setText(tot);

Lo fai e basta

totalCost.setText( "" + total );

Dove "" + <variabile> lo convertirà automaticamente in stringa


0

Informazioni complete

Puoi usare String.valueOf () per float, double, int, boolean ecc.

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

Esistono tre modi per convertire double in String .

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

    classe pubblica 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 da raddoppiare

  1. Double.parseDouble (str);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.