格式化字符串以删除科学记数法 – 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; } 

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

我想要做的是最终得到一个不包含E号的浮点数。

我一直在阅读这个线程,这表明我可以使用BigDecimal,但无法让它工作 – 这是最好的方法还是我应该尝试其他的东西? 如何在Java中将字符串3.0103E-7转换为0.00000030103?

以下是您稍微修改过的代码。 按照我的说法,这种方法效果很好,实际上并不关心指数的顺序:

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

接受的回答对我不起作用,何时做

 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; } 
 NumberFormat format = new DecimalFormat("0.############################################################"); System.out.println(format.format(Math.ulp(0F))); System.out.println(format.format(1F)); 

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

http://ideone.com/jgN6l

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

由于浮点,您会注意到一些奇怪的数字。