2012-05-09 39 views
7

我有以下代码其将一串数字(由空格隔开),然后创建float数组:格式化字符串删除科学记数法 - 爪哇

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

的问题是,一些字符串中的值用科学记数法格式化 - 例如它们读取-3.04567E-8。

我想要做的是以不包含E号码的浮点数结尾。

我一直在阅读这个线程,这表明我可以使用BigDecimal,但是我无法得到这个工作 - 这是最好的方法还是应该尝试其他的东西? How to convert a string 3.0103E-7 to 0.00000030103 in Java?

+1

的浮不包含e数字。科学记谱法是可能代表浮游物的方法之一。如果默认格式不适用于您,请查看java.text.DecimalFormat。 – theglauber

回答

9

下面是你的代码稍作修改。按照我这个工作得很好,实际上并不关心他的指数的顺序为:

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

完美 - 谢谢。也很感谢您修改代码。 – GuybrushThreepwood

+0

快乐是我的全部:) – dharam

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

浮动不包含e,那就是它是多么显示给你。您可以使用DecimalFormat更改显示方式。

http://ideone.com/jgN6l

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

你会发现,虽然一些奇怪的数字看,由于浮点。

2

接受答道不工作对我来说,什么时候

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

的Float.parseFloat(RES)将非科学诠释变为科学诠释,所以我不得不删除它。

这一个工作:

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