2010-01-20 28 views
5

Tengo un número muy pequeño y quiero convertirlo en una Cadena con el número completo, no abreviado de ninguna manera. No sé cuán pequeño puede ser este número.convertir muy pequeño doble en una Cadena

por ejemplo, cuando corro:

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

muestra 1.0E-10 en lugar de 0,000000001.

Ya he intentado NumberFormat.getNumberInstance() pero da formato a 0. y no sé qué expresión usar en un DecimalFormat para trabajar con cualquier número.

+2

¿Pero qué quieres si imprime '1e-300'? 300 ceros? – kennytm

Respuesta

10

Suponiendo que desea 500 ceros delante de su número cuando lo hace:

double d = 1E-500; 

continuación, puede utilizar:

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

FYI: El número más pequeño de doble precisión es ~' 5e-324'. – kennytm

+0

Gracias, no lo sabía. Por cierto, de dónde sacaste este número? – ryanprayogo

+0

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

3

Puede establecer el número máximo y mínimo de dígitos en la fracción de un formateador de números con setMinimumFractionDigits y setMaximumFractionDigits. Eso debería arreglar el problema.

2

Usted puede hacerlo con BigDecimals en Java 5 usando:

Tenga en cuenta que si tiene el doble valor como una cadena en primer lugar, sería mejor utilizar:

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

... como se explica en los javadocs BigDecimal.

Cuestiones relacionadas