2011-11-13 26 views
5

Estoy buscando una forma de formatear un número de punto flotante dinámicamente en formato decimal estándar o notación científica, dependiendo del valor del número.compacto Comportamiento de formato numérico en Java (cambia automáticamente entre notación decimal y científica)

  • Para magnitudes moderadas, el número debe formatearse como un decimal con los ceros al final suprimidos. Si el número de coma flotante es igual a un valor integral, el punto decimal también debe suprimirse.
  • Para magnitudes extremas (muy pequeñas o muy grandes), el número debe expresarse en notación científica. Alternativamente, si el número de caracteres en la expresión como notación decimal estándar excede cierto umbral, cambie a la notación científica.
  • Debería tener control sobre número máximo de dígitos de precisión, pero no quiero agregar cero al final para expresar precisión mínima; todos los ceros finales deben ser suprimidos.

Básicamente, debería optimizar para compacidad y legibilidad.

2.80000 ->2.8

765.000000 ->765

0.0073943162953 ->0.00739432 (dígitos de límite de precisión — a 6 en este caso)

0.0000073943162953 ->7.39432E-6 (cambia a notación científica si la magnitud es lo suficientemente pequeña — menos de 1E-5 en este caso)

7394316295300000 ->7.39432E+6 (cambia a notación científica si la magnitud es suficiente — por ejemplo, grandes cuando es mayor que 1E+10)

0.0000073900000000 ->7.39E-6 (tira ceros finales de mantisa en notación científica)

0.000007299998344 ->7.3E-6 (redondeo del límite de precisión de 6 dígitos hace que este número para tener ceros a la derecha, que son despojados)


Aquí es lo que he encontrado hasta ahora:

  • El método de la clase Número .toString() hace la mayor parte de lo que quiero, excepto que no Upconvert a entero representación cuando sea posible, y no va a expresar grandes magnitudes integrales en notación científica. Además, no estoy seguro de cómo ajustar la precisión.
  • La cadena "%G" formato a la función String.format(...) me permite expresar números en notación científica con precisión ajustable, pero no elimina los ceros finales.

Me pregunto si ya hay alguna función de biblioteca que cumpla con estos criterios.Supongo que el único obstáculo para escribir esto mismo es tener que quitar los ceros a la derecha de la mantisa en notación científica producida por %G.

Respuesta

Cuestiones relacionadas