without scientific quitar numeros numero notacion normal convertir cientificos cientifica java string floating-point bigdecimal

scientific - numeros cientificos java



Formatear una cadena para eliminar la notación científica-Java (4)

Tengo el siguiente código que divide una cadena de números (separados por un espacio) y luego crea una matriz de flotantes:

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

El problema es que algunos de los valores en la cadena están formateados con notación científica, por ejemplo, que leen -3.04567E-8.

Lo que quiero hacer es terminar con un flotador que no contenga el número E.

He estado leyendo este hilo que sugiere que podría usar BigDecimal, pero no puedo hacerlo funcionar. ¿Es este el mejor enfoque o debería intentar algo más? ¿Cómo convertir una cadena 3.0103E-7 a 0.00000030103 en Java?


Debajo está su código ligeramente modificado. Según yo, esto funciona bien y en realidad no le importa el orden de los exponentes:

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


El flotador no contiene una e , así es como se te muestra. Puede usar DecimalFormat para cambiar la forma en que se muestra.

http://ideone.com/jgN6l

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

Sin embargo, observará algunos números de aspecto extraño debido al punto flotante.


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


La respuesta aceptada no funciona para mí, ¿cuándo?

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

el Float.parseFloat (res) cambia la anotación no científica en una anotación científica, así que tuve que eliminarla.

Este trabajó:

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