2012-05-09 8 views
7

ich den folgenden Code haben, der eine Reihe von Zahlen spaltet (durch ein Leerzeichen getrennt) und erstellt dann eine Reihe von Schwimmern:einen String-Formatierung Scientific Notation entfernen - 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; 
} 

Das Problem ist, dass einige Die Werte in der Zeichenkette werden mit wissenschaftlicher Notation formatiert - zB lesen sie -3.04567E-8.

Was ich tun möchte, ist am Ende mit einem Float, der nicht die E-Nummer enthält.

Ich habe diesen Thread gelesen, der vorschlägt, dass ich BigDecimal verwenden könnte, jedoch bin ich nicht in der Lage, dies zur Arbeit zu bringen - ist das der beste Ansatz oder sollte ich etwas anderes versuchen? How to convert a string 3.0103E-7 to 0.00000030103 in Java?

+1

Ein Schwimmer nicht die E-Nummer enthält. Die wissenschaftliche Notation ist eine der Möglichkeiten, wie Floats dargestellt werden können. Wenn das Standardformat für Sie nicht funktioniert, werfen Sie einen Blick in java.text.DecimalFormat. – theglauber

Antwort

9

Unten ist Ihr Code leicht verändert. Wie pro mir dies gut funktioniert und nicht wirklich kümmert er sich um der Exponenten:

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

Perfekt - danke. Ich freue mich auch über die Änderung des Codes. – GuybrushThreepwood

+0

Das Vergnügen ist alles meins :) – dharam

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

Der Schwimmer enthält keine e, dass gerade ist, wie es Ihnen angezeigt wird. Sie können DecimalFormat verwenden, um zu ändern, wie es angezeigt wird.

http://ideone.com/jgN6l

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

Sie werden allerdings einige seltsam aussehende Zahlen bemerken, aufgrund Gleitkomma.

2

Accepted antwortete für mich nicht funktioniert, Wann

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

die Float.parseFloat (res) Ändern Sie nicht wissenschaftliche Anotation in wissenschaftliche Anotation, also musste ich es löschen.

Dieser arbeitete:

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; 
}