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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top