2010-01-20 6 views
5

J'ai un très petit nombre et je veux le convertir en une chaîne avec le nombre entier, pas abrégé en aucune façon. Je ne sais pas combien ce nombre peut être petit.convertir très petit double en une chaîne

par exemple, quand je lance:

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

il montre 1.0E-10 au lieu de 0,000000001.

J'ai déjà essayé NumberFormat.getNumberInstance() mais il formate à 0. et je ne sais pas quelle expression utiliser sur un DecimalFormat pour travailler avec n'importe quel nombre.

+2

Mais que voulez-vous s'il imprime '1e-300'? 300 zéros? – kennytm

Répondre

10

En supposant que vous voulez 500 zéros devant votre numéro quand vous faites:

double d = 1E-500; 

vous pouvez utiliser:

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

FYI: Le plus petit nombre double précision est ~ '5e-324'. – kennytm

+0

Merci, je ne le savais pas BTW, d'où avez-vous obtenu ce numéro – ryanprayogo

+0

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

3

Vous pouvez définir le nombre maximal et minimal de chiffres dans la fraction d'un format numérique avec setMinimumFractionDigits et setMaximumFractionDigits. Cela devrait résoudre le problème.

2

Vous pouvez le faire avec BigDecimals en Java 5 en utilisant:

Notez que si vous avez la valeur double en tant que chaîne en premier lieu, il serait préférable d'utiliser: 0.
System.out.println(new java.math.BigDecimal("1E-10").toPlainString()); 

... comme expliqué dans les javadocs BigDecimal.

Questions connexes