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 に答える