Como pasar de String a Double sin perder precisión en los decimales – Java

publicado por: Anonymous

Quiero pasar un número decimal que está en una variable de tipo String a una de tipo Double, pero antes aplicando un formato concreto con DecimalFormat (import java.Text.DecimalFormat) para que tenga siempre 3 decimales. Al realizar la conversión siempre me pierde decimales, más exactamente los decimales que son 0 a la derecha.

¿Sabéis como realizar esta conversión sin perder esa precisión?

Yo he encontrado que utilizando el tipo BigDecimal se soluciona, pero me gustaría realizar esta conversión sin utilizarlo.

Saludos,


Por ejemplo:

Double d = 0.85;   // 0.85
DecimalFormat mf = new DecimalFormat("#0.000");
String s = mf.format(d); // "0,850"

s = s.replace(',', '.'); // "0.850"

double conv = Double.parseDouble(s); //0.85

//Como pasar del String s = "0.850" -> Double = 0.850?

solución

La conversión que realizas es correcta:

double conv = Double.parseDouble(s); //0.85

No veo la necesidad de agregar los decimales que son cero después del punto decimal en un valor de tipo doble.

Si tienes decimales en 0 después del punto decimal es como si no existieran por lo tanto:

 if(0.850 == 0.85){
            System.out.println("Esto es lo mismo!");
   }

Si definimos una variable con decimales a la derecha que son ceros, después del punto decimal:

double va = 0.8500000000000;

el valor sera siempre 0.85

Si definimos una variable con decimales a la derecha y existe un numero que no es cero, después del punto decimal:

double va = 0.8500000000001;

entonces el valor sería 0.8500000000001

Si ùnicamente deseas imprimir en pantalla el valor y asegurar tener todos los decimales puedes usar setMinimumFractionDigits()

  Double d = 0.85;   // 0.85
        DecimalFormat mf = new DecimalFormat("0.000");
        mf.setMinimumFractionDigits(3);
        String s = mf.format(d);

Aquí tendrás un valor: 0.850

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *