我有以下代码,它分割一串数字(用空格分隔),然后创建一个浮点数组:
//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?
答案 0 :(得分: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);
}
}
答案 1 :(得分:2)
接受的回答对我不起作用,什么时候
floatsArray[l] = Float.parseFloat(res);
Float.parseFloat(res)将非科学的anotation改为科学的anotation,所以我不得不删除它。
这个有用:
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;
}
答案 2 :(得分:1)
NumberFormat format = new DecimalFormat("0.############################################################");
System.out.println(format.format(Math.ulp(0F)));
System.out.println(format.format(1F));
答案 3 :(得分:1)
浮动不包含e
,这就是它显示给你的方式。您可以使用DecimalFormat
更改其显示方式。
java.text.DecimalFormat df = new java.text.DecimalFormat("#,###.######################################################");
System.out.println(df.format(res));
由于浮点,你会注意到一些奇怪的数字。