2010-01-20 11 views
5

Ho un numero molto piccolo e voglio convertirlo in una stringa con il numero completo, non abbreviato in alcun modo. Non so quanto piccolo possa essere questo numero.convertire un doppio molto piccolo in una stringa

per esempio, quando corro:

double d = 1E-10; 
System.out.println(d); 

mostra 1.0E-10 anziché 0,000000001.

Ho già provato NumberFormat.getNumberInstance() ma si formatta in 0. e non so quale espressione usare su un DecimalFormat per lavorare con qualsiasi numero.

+2

Ma cosa vuoi se stampa '1e-300'? 300 zeri? – kennytm

risposta

10

Supponendo che si desidera 500 zeri davanti al vostro numero quando si fanno:

double d = 1E-500; 

allora si può usare:

double d = 1E-10; 
NumberFormat nf = NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(Integer.MAX_VALUE); 
System.out.println(nf.format(d)); 
+0

FYI: Il più piccolo numero di precisione doppia è ~' 5e-324'. – kennytm

+0

Grazie, non lo sapevo BTW, da dove hai preso questo numero? – ryanprayogo

+0

http://en.wikipedia.org/wiki/Double_precision_floating-point_format#IEEE_754_double_precision_binary_floating-point_format:_binary64 – kennytm

3

È possibile impostare il numero massimo e minimo di cifre nella frazione di un numero di formattazione con setMinimumFractionDigits e setMaximumFractionDigits. quello dovrebbe risolvere il problema.

2

si può fare con BigDecimals in Java 5 utilizzando:

System.out.println(new java.math.BigDecimal(Double.toString(1E-10)).stripTrailingZeros().toPlainString()); 

Si noti che se si ha il doppio valore come stringa in primo luogo, è meglio usare:

System.out.println(new java.math.BigDecimal("1E-10").toPlainString()); 

... come spiegato nel javadoc BigDecimal.

Problemi correlati