7

我有以下代码拆分一串数字(由空格分隔),然后创建一个浮点数组:

//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,但是无法让它工作 - 这是最好的方法还是我应该尝试其他方法?如何在 Java 中将字符串 3.0103E-7 转换为 0.00000030103?

4

4 回答 4

8

以下是您的代码稍作修改。据我所知,这很好用,实际上并不关心指数的顺序:

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

}
于 2012-05-09T17:16:54.780 回答
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;
}
于 2014-12-02T10:23:46.873 回答
1
NumberFormat format = new DecimalFormat("0.############################################################");
System.out.println(format.format(Math.ulp(0F)));
System.out.println(format.format(1F));
于 2012-05-09T17:13:46.420 回答
1

浮动不包含e,这就是它向您显示的方式。您可以使用DecimalFormat它来更改它的显示方式。

http://ideone.com/jgN6l

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

但是,由于浮点,您会注意到一些看起来很奇怪的数字。

于 2012-05-09T17:14:48.047 回答