Convertir la notación científica a notación decimal
-
20-09-2019 - |
Pregunta
Hay una pregunta similar sobre SO lo que sugiere el uso de NumberFormat que es lo que he hecho.
Estoy utilizando el método parse () de NumberFormat.
public static void main(String[] args) throws ParseException{
DecToTime dtt = new DecToTime();
dtt.decToTime("1.930000000000E+02");
}
public void decToTime(String angle) throws ParseException{
DecimalFormat dform = new DecimalFormat();
//ParsePosition pp = new ParsePosition(13);
Number angleAsNumber = dform.parse(angle);
System.out.println(angleAsNumber);
}
El resultado que se ve es
1,93
Yo no esperaba que esto funcione porque 1.930000000000E + 02 es un número bastante inusual que mira, tengo que hacer un poco de hilo analizar primero para eliminar los ceros? ¿O hay una manera rápida y elegante?
Solución
Cuando se utiliza DecimalFormat con una expresión en notación científica, es necesario especificar un patrón. Pruebe algo como
DecimalFormat dform = new DecimalFormat("0.###E0");
Vea la javadocs para DecimalFormat -. hay una sección marcada "notación científica"
Otros consejos
Memorizar la sintaxis String.format
lo que puede convertir sus dobles y BigDecimals a las cadenas de cualquier precisión y sin correo notación:
Este código Java:
double dennis = 0.00000008880000d;
System.out.println(dennis);
System.out.println(String.format("%.7f", dennis));
System.out.println(String.format("%.9f", new BigDecimal(dennis)));
System.out.println(String.format("%.19f", new BigDecimal(dennis)));
Las impresiones:
8.88E-8
0.0000001
0.000000089
0.0000000888000000000
Si usted toma su ángulo como un doble, en lugar de una cadena, se puede usar printf magia.
System.out.printf("%.2f", 1.930000000000E+02);
Muestra el flotador a 2 decimales. 193.00
.
Si bien se usan "%.2e"
como el especificador de formato, se llega a "1.93e+02"
(no estoy seguro exactamente lo que quieres de salida, pero podría ser útil.)