2011-11-13 14 views
5

Sto cercando un modo per formattare un numero in virgola mobile in modo dinamico in formato decimale standard o notazione scientifica, a seconda del valore del numero.Comportamento della formattazione dei numeri compatti in Java (passaggio automatico tra decimale e notazione scientifica)

  • Per magnitudini moderate, il numero deve essere formattato come decimale con gli zeri finali soppressi. Se il numero in virgola mobile è uguale a un valore integrale, anche il punto decimale dovrebbe essere soppresso.
  • Per magnitudini estreme (molto piccole o molto grandi), il numero deve essere espresso in notazione scientifica. In alternativa, se il numero di caratteri nell'espressione come notazione decimale standard supera una certa soglia, passare alla notazione scientifica.
  • Dovrei avere il controllo sul numero massimo numero di cifre di precisione, ma non voglio aggiungere zeri finali per esprimere la precisione minimo; tutti gli zeri finali dovrebbero essere soppressi.

Fondamentalmente, deve ottimizzare per compattezza e leggibilità.

2.80000 ->2.8

765.000000 ->765

0.0073943162953 ->0.00739432 (cifre limite di precisione — a 6 in questo caso)

0.0000073943162953 ->7.39432E-6 (passa a notazione scientifica, se la magnitudine è abbastanza piccola — inferiore a 1E-5 in questo caso)

7394316295300000 ->7.39432E+6 (interruttore notazione scientifica se la grandezza è sufficiente — per esempio, grandi quando superiore 1E+10)

0.0000073900000000 ->7.39E-6 (striscia zeri da significando in notazione scientifica)

0.000007299998344 ->7.3E-6 (arrotondamento dal limite di precisione 6 cifre provoca questo numero per avere zeri finali che sono nuda)


Ecco quello che ho trovato finora:

  • Il .toString() metodo della classe Numero fa la maggior parte di ciò che voglio, tranne che non upconvert a intero rappresentazione, quando possibile, e non esprimeranno grandi grandezze integrali in notazione scientifica. Inoltre, non sono sicuro di come regolare la precisione.
  • La stringa di formato "%G" per la funzione String.format(...) mi consente di esprimere numeri in notazione scientifica con precisione regolabile, ma non elimina gli zero finali.

Mi chiedo se ci sia già qualche funzione di libreria che soddisfi questi criteri.Immagino che l'unico ostacolo per scrivere questo io stesso è dover togliere gli zeri finali dal significato e dalla notazione scientifica prodotta da %G.

risposta

Problemi correlati