Convertir cadena a doble en Java

Respuestas:

471

Puedes usar Double.parseDouble()para convertir de Stringa a double:

String text = "12.34"; // example String
double value = Double.parseDouble(text);

Para su caso, parece que quiere:

double total = Double.parseDouble(jlbTotal.getText());
double price = Double.parseDouble(jlbPrice.getText());
WhiteFang34
fuente
entonces mi codificación debería ser double total = Double.parseDouble (string) ;?
TinyBelly
44
@TinyBelly: sí, parece que quieres:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34
1
@TinyBelly: debe extraer la parte del texto de la cadena que desea analizar para el doble. Aquí hay una forma en que podría hacerlo para su caso, aunque no puedo garantizar que funcione para todo: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- esto básicamente reemplaza todos los caracteres que no son un número o .nada, dejando solo el número y el punto decimal para analizar.
WhiteFang34
44
No es aconsejable utilizar el doble para el cálculo de precios.
Bozho
2
Para aquellos atraídos aquí mientras buscan el resultado de la clase en Doublelugar del doubleuso de tipo primitivo Double.valueOf(String).
Pshemo
48

Si tiene problemas para analizar la cadena a valores decimales, debe reemplazar "," en el número a "."


String number = "123,321";
double value = Double.parseDouble( number.replace(",",".") );
TmRocha
fuente
2
Otra opción: DecimalFormat df = new DecimalFormat (); DecimalFormatSymbols sfs = new DecimalFormatSymbols (); sfs.setDecimalSeparator (','); df.setDecimalFormatSymbols (sfs); df.parse (número);
Robertiano
37

Para convertir una cadena de nuevo en un doble, intente lo siguiente

String s = "10.1";
Double d = Double.parseDouble(s);

El método parseDouble logrará el efecto deseado, y también lo hará el método Double.valueOf ().

Alex Oczkowski
fuente
2
No, String.valueOf (something) devuelve una representación de String de algo: si algo es un tipo incorporado o si es un Object y es nulo, de lo contrario es equivalente a someObject.toString (). Para obtener un Doble de una Cadena, uno debe hacerlo al revés, como se muestra en las otras respuestas (Double.valueOf (someString) devuelve un Double, y Double.parseDouble (someString) devuelve un double).
Johann Petrak
36
double d = Double.parseDouble(aString);

Esto debería convertir la cadena aString en el doble d.

Andreas Vinter-Hviid
fuente
aString se refiere a qué? ¿Puedes ayudarme a explicar más?
TinyBelly
2
aString es solo una cadena. Más específicamente, la cadena que desea convertir a un número.
Andreas Vinter-Hviid
30

Uso new BigDecimal(string). Esto garantizará el cálculo adecuado más adelante.

Como regla general, use siempre BigDecimalpara cálculos sensibles como el dinero.

Ejemplo:

String doubleAsString = "23.23";
BigDecimal price = new BigDecimal(doubleAsString);
BigDecimal total = price.plus(anotherPrice);
Bozho
fuente
20

Solo necesita analizar los valores de cadena usando Double

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);
Harshal Patil
fuente
14

Citando nuevamente la cita de Robertiano, porque esta es, con mucho, la versión adaptativa más versátil y de localización. Se merece una publicación completa!

Otra opción:

DecimalFormat df = new DecimalFormat(); 
DecimalFormatSymbols sfs = new DecimalFormatSymbols();
sfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(sfs);
double d = df.parse(number).doubleValue();
JBWanscher
fuente
8
String double_string = "100.215";
Double double = Double.parseDouble(double_string);
Habibur Rahman Ovie
fuente
3

Esto es lo que haría

    public static double convertToDouble(String temp){
       String a = temp;
       //replace all commas if present with no comma
       String s = a.replaceAll(",","").trim(); 
      // if there are any empty spaces also take it out.          
      String f = s.replaceAll(" ", ""); 
      //now convert the string to double
      double result = Double.parseDouble(f); 
    return result; // return the result
}

Por ejemplo, si ingresa la Cadena "4 55,63. 0", la salida será el número doble 45563.0

faisalsash
fuente
2

Usar Double.parseDouble()sin try/catchbloque circundante puede causar potencialNumberFormatException si la cadena doble de entrada no se ajusta a un formato válido.

Guava ofrece un método de utilidad para esto que regresa nullen caso de que su String no pueda analizarse.

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitives/Doubles.html#tryParse(java.lang.String)

Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);

En tiempo de ejecución, una entrada de cadena con formato incorrecto produce rendimientos nullasignados avalueDouble

DYS
fuente
"devuelve 0.0 en caso de que su String no se pueda analizar" - El Javadoc no admite esa afirmación.
Tom
@Tom Devuelve un valor nulo Tipo doble que se puede convertir a 0.0 tipo doble - DYS Hace 13 segundos editar
DYS
1
Puede, pero no automáticamente, y su fragmento no puede hacerlo.
Tom
1

Lo usé para convertir cualquier número de Cadena al doble cuando necesita int, solo convierta el tipo de datos de num y num2 a int; tomó todos los casos para cualquier cadena doble con Eng: "Bader Qandeel"

public static double str2doubel(String str) {
    double num = 0;
    double num2 = 0;
    int idForDot = str.indexOf('.');
    boolean isNeg = false;
    String st;
    int start = 0;
    int end = str.length();

    if (idForDot != -1) {
        st = str.substring(0, idForDot);
        for (int i = str.length() - 1; i >= idForDot + 1; i--) {
            num2 = (num2 + str.charAt(i) - '0') / 10;
        }
    } else {
        st = str;
    }

    if (st.charAt(0) == '-') {
        isNeg = true;
        start++;
    } else if (st.charAt(0) == '+') {
        start++;
    }

    for (int i = start; i < st.length(); i++) {
        if (st.charAt(i) == ',') {
            continue;
        }
        num *= 10;
        num += st.charAt(i) - '0';
    }

    num = num + num2;
    if (isNeg) {
        num = -1 * num;
    }
    return num;
}
Ahmed M Bader El-Din
fuente
1
String s = "12.34";
double num = Double.valueOf(s);
Ranjith Alappadan
fuente
0

Puede usar double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
HussainOmer
fuente