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

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(",",".") );

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


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.


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

20

Solo necesita analizar los valores de cadena usando Double

String someValue= "52.23";
Double doubleVal = Double.parseDouble(someValue);
System.out.println(doubleVal);

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



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


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


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


0

Puede usar double.parseDouble ();

String num = "10.1";
Double x = Double.parseDouble(num);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.