Convertir doble a cadena

202

No estoy seguro de si soy yo o qué, pero tengo problemas para convertir un doble en una cadena.

Aquí está mi código:

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

¿Estoy haciendo algo mal o me estoy perdiendo un paso aquí?

Me da error NumberFormatExceptional intentar convertir esto.

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

Estoy tratando de hacer esto en un onTouchListener. Publicaré más código, básicamente cuando el usuario toca el cuadro de edición de texto, quiero que la información calcule y complete el cuadro de edición de texto.

Brandon Wilson
fuente
44
Me parece bien, ¿qué problema has encontrado?
MByD
2
¿Es ese el código real que estás ejecutando? Esas líneas funcionan perfectamente.
mcabral
1
Double.toString (double) ni siquiera puede lanzar NumberFormatException: ¿estás seguro de que la excepción no se está lanzando desde otro lugar?
Random832
1
Debe haber algo más, esto debería funcionar bien. ideone.com/btGrv
Kevin
1
Mostrar stacktrace y código completo
Bozho

Respuestas:

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

Esto convertirá doble a String

Bhavit S. Sengar
fuente
22
tenga en cuenta lo siguiente si total = 1234567890123456, entonces la Cadena se convierte en "1.234567890123456E15", que a menudo no es lo que desea
usuario 1735824
66
alguna solución para el anterior?
Prashanth Debbadwar
66
@PrashanthDebbadwar Sí: NumberFormat fmt = NumberFormat.getInstance(); fmt.setGroupingUsed(false); fmt.setMaximumIntegerDigits(999); fmt.setMaximumFractionDigits(999);luego usetotal2 = fmt.format(total)
Andreas
Esto internamente llama Double.toString(). No estoy seguro de cómo responde la pregunta.
shmosel
24

Usando Double.toString (), si el número es demasiado pequeño o demasiado grande, obtendrá una notación científica como esta: 3.4875546345347673E-6. Hay varias formas de tener más control del formato de cadena de salida.

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

Usar String.format () será la mejor manera conveniente.

Nicholas Lu
fuente
14

Este código compila y funciona para mí. Convierte un doble en una cadena utilizando las llamadas que intentó.

public class TestDouble {

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

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

Me sorprende que veas la NumberFormatException. Mira el rastro de la pila. Supongo que tiene otro código que no está mostrando en su ejemplo que está causando que se arroje esa excepción.

ditkin
fuente
Me sorprende que veas la NumberFormatException. Mira el rastro de la pila. Supongo que tiene otro código que no está mostrando en su ejemplo que está causando que se arroje esa excepción.
ditkin
1
También lo hace el código del OP. No hay un problema aquí para resolver.
Brian Roach el
posible, estoy tratando de hacer esto en un onTouchListener. Publicaré más código, básicamente cuando el usuario toca el cuadro de edición de texto, quiero que la información calcule y complete el cuadro de edición de texto.
Brandon Wilson el
6

La excepción probablemente proviene de las llamadas parseDouble (). Verifique que los valores dados a esa función realmente reflejen un doble.

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

funciona. Tiene que ser repetitivo.

agon
fuente
3

Kotlin

Puede usar .toStringdirectamente en cualquier tipo de datos en kotlin, como

val d : Double = 100.00
val string : String = d.toString()
Khemraj
fuente
1
double total = 44;
String total2= new Double(total).toString();

este código funciona

olyanren
fuente
3
Double.toString()llamadas String.valueOf(double)que llamadas Double.toString(double). Loco, ¿eh?
corsiKa
También lo hace el código del OP. No hay un problema aquí para resolver.
Brian Roach el
2
@ Muhammed - ¿Posible? Es lo que hace
Brian Roach el
2
@ Muhammad bien, estás creando un objeto solo para obtener su valor de cadena. Si esto estuviera en un bucle de algún tipo, podría experimentar una sobrecarga adicional (innecesaria). No soy un gran admirador de la optimización prematura, pero soy un fanático de evitar deficiencias obvias.
corsiKa
1
@Brian okey entiendo :) gracias. Tienes razón, también lo hace glowcoder
olyanren
1
double priceG = Double.parseDouble(priceGal.getText().toString());
double valG = Double.parseDouble(volGal.toString());

Uno de ellos es lanzar la excepción. Debe agregar un poco de registro / impresión para ver qué hay dentro volGaly priceGalno es lo que piensa.

Brian Roach
fuente
Cambié el total a un número fijo como 44 y todavía me dio un error.
Brandon Wilson el
¿Qué "total"? Su fragmento de código original no pudo lanzar esa excepción. Las dos llamadas que muestro arriba pueden. Uno de tus Stringcorreos electrónicos no es una representación válida de, doublepor lo que obtienes esa excepción.
Brian Roach el
Para ser claro; Double.toString(total); No se puede lanzar una excepción. Nunca. . Cambiaste lo que new Double(total).toString();tampoco puedes y si ves la respuesta aquí que ha sido rechazada, no es algo que quieras hacer.
Brian Roach el
Ok, voy a cambiar eso. Saqué ese pequeño bit de código del ontouchlistener y funcionó bien. pero cuando está en el ontouchlistener arroja el error. Estoy tratando de hacer esto en un onTouchListener. Publicaré más código, básicamente cuando el usuario toca el cuadro de edición de texto, quiero que la información calcule y complete el cuadro de edición de texto.
Brandon Wilson el
1

double.toString()Deberia trabajar. No el tipo de variable Double, sino la variable en sí double.

Matt F.
fuente
debes considerar que a veces devolverá un número con notación científica E como -2.23561E5
Augustas
0

Solo usa lo siguiente:

doublevalue+""; 

Esto funcionará para cualquier tipo de datos.

Ejemplo:

Double dd=10.09;
String ss=dd+"";
Rahul Purohit
fuente
77
Muy mal hábito de stringificar agregando a una cadena vacía. Utilice func JDK dedicada lugar
StackHola
2
@ Michael.P ¿por qué es malo?
gab06
He estado haciendo esto durante todo mi tiempo como programador java jajaja.
gab06
1
A menos que haya alguna optimización en tiempo de compilación en juego, llamaría a un constructor adicional y un método de adición.
dsmith
1
Siempre use String.valueOf (dd) en su lugar. Esto también funcionará para cualquier tipo de datos.
BladeCoder
0

Usa la StringBuilderclase, así:

StringBuilder meme = new StringBuilder(" ");

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

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

Obtendrá la salida deseada.

abhishek sheregar
fuente
0

¿Qué tal cuando haces el

totalCost.setText(tot);

Solo lo haces

totalCost.setText( "" + total );

Donde el "" + <variable> lo convertirá en cadena automáticamente

Francisco Azevedo
fuente
0

Información completa

Puede usar String.valueOf () para float, double, int, boolean, etc.

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
fuente
0

Hay tres formas de convertir el doble a String .

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

    clase pública 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);
    
    }

    }

Cadena para doblar

  1. Double.parseDouble (str);
Neeraj Gahlawat
fuente