2012-05-09 387 views
7

he el siguiente código que se divide una cadena de números (separados por un espacio) y luego crea una serie de flotadores:formato a una cadena quitar notación científica - Java

//Split the string and then build a float array with the values. 
String[] tabOfFloatString = value.split(" "); 
int length = tabOfFloatString.length; 
System.out.println("Length of float string is" + length); 
float[] floatsArray = new float[length]; 
for (int l=0; l<length; l++) { 
float res = Float.parseFloat(tabOfFloatString[l]); 
    System.out.println("Float is " + res); 
    floatsArray[l]=res; 
} 

El problema es que algunos de los valores en la cadena están formateados con notación científica, por ejemplo, leen -3.04567E-8.

Lo que quiero hacer es terminar con un flotador que no contiene el número E.

He estado leyendo este hilo que sugiere que podría usar BigDecimal, pero no puedo hacer que funcione, ¿es este el mejor método o debería probar algo más? How to convert a string 3.0103E-7 to 0.00000030103 in Java?

+1

Un flotador no contiene el número E. La notación científica es una de las formas en que los flotadores pueden ser representados. Si el formato predeterminado no funciona para usted, eche un vistazo a java.text.DecimalFormat. – theglauber

Respuesta

9

A continuación se muestra el código ligeramente modificado. Según mi esto funciona bien y en realidad no le importa que el orden de los exponentes:

public void function() { 
    String value = "123456.0023 -3.04567E-8 -3.01967E-20"; 
    String[] tabOfFloatString = value.split(" "); 
    int length = tabOfFloatString.length; 
    System.out.println("Length of float string is" + length); 
    float[] floatsArray = new float[length]; 
    for (int l = 0; l < length; l++) { 
     String res = new BigDecimal(tabOfFloatString[l]).toPlainString(); 
     System.out.println("Float is " + res); 
     floatsArray[l] = Float.parseFloat(res); 
    } 

} 
+0

Perfecto, gracias. También le agradecería que haya modificado el código. – GuybrushThreepwood

+0

El placer es todo mío :) – dharam

1
NumberFormat format = new DecimalFormat("0.############################################################"); 
System.out.println(format.format(Math.ulp(0F))); 
System.out.println(format.format(1F)); 
1

El flotador no contiene un e, eso es sólo la forma en que se está mostrando en su caso. Puede usar DecimalFormat para cambiar la forma en que se muestra.

http://ideone.com/jgN6l

java.text.DecimalFormat df = new java.text.DecimalFormat("#,###.######################################################"); 
System.out.println(df.format(res)); 

Usted se dará cuenta de algunos números de aspecto raro, sin embargo, debido a la coma flotante.

2

Aceptado respondió no funciona para mí, ¿cuándo

floatsArray[l] = Float.parseFloat(res); 

la Float.parseFloat (res) cambiar la anotación no científica en una anotación científica, así que tuve que eliminarla.

Esto se trabajó:

public String[] avoidScientificNotation(float[] sensorsValues) 
{ 
    int length = sensorsValues.length; 
    String[] valuesFormatted = new String[length]; 

    for (int i = 0; i < length; i++) 
    { 
     String valueFormatted = new BigDecimal(Float.toString(sensorsValues[i])).toPlainString(); 
     valuesFormatted[i] = valueFormatted; 
    } 
    return valuesFormatted; 
} 
Cuestiones relacionadas