¿Cómo imprimo un valor doble sin notación científica usando Java?
Quiero imprimir un valor doble en Java sin forma exponencial.
double dexp = 12345678;
System.out.println("dexp: "+dexp);
Muestra esta notación E: 1.2345678E7
.
Quiero que lo imprima así:12345678
¿Cuál es la mejor manera de prevenir esto?
Java impide la notación E en un doble:
Cinco formas diferentes de convertir un número doble en normal:
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class Runner {
public static void main(String[] args) {
double myvalue = 0.00000021d;
//Option 1 Print bare double.
System.out.println(myvalue);
//Option2, use decimalFormat.
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(8);
System.out.println(df.format(myvalue));
//Option 3, use printf.
System.out.printf("%.9f", myvalue);
System.out.println();
//Option 4, convert toBigDecimal and ask for toPlainString().
System.out.print(new BigDecimal(myvalue).toPlainString());
System.out.println();
//Option 5, String.format
System.out.println(String.format("%.12f", myvalue));
}
}
Este programa imprime:
2.1E-7
.00000021
0.000000210
0.000000210000000000000001085015324114868562332958390470594167709350585
0.000000210000
Que son todos del mismo valor.
Consejo profesional: si no sabe por qué esos dígitos aleatorios aparecen más allá de cierto umbral en el valor doble, este video explica: informático, ¿por qué 0.1
+ es 0.2
igual 0.30000000000001
?
http://youtube.com/watch?v=PZRI1IfStY0
Podrías usar printf()
con %f
:
double dexp = 12345678;
System.out.printf("dexp: %f\n", dexp);
Esto se imprimirá dexp: 12345678.000000
. Si no quieres la parte fraccionaria, usa
System.out.printf("dexp: %.0f\n", dexp);
0 en %.0f
significa 0 lugares en parte fraccionaria, es decir, sin parte fraccionaria. Si desea imprimir una parte fraccionaria con el número deseado de decimales, en lugar de 0, proporcione un número como este %.8f
. Por defecto, la parte fraccionaria se imprime con hasta 6 decimales.
Esto utiliza el lenguaje del especificador de formato explicado en la documentación .
El formato predeterminado toString()
utilizado en su código original se detalla aquí .