2010-01-20 12 views
5

Ich habe eine sehr kleine Nummer und ich möchte es in einen String mit der vollen Zahl, nicht in irgendeiner Weise abgekürzt konvertieren. Ich weiß nicht, wie klein diese Zahl sein kann.konvertieren sehr kleine Doppel zu einem String

zum Beispiel, wenn ich laufe:

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

es 1.0E-10 zeigt statt 0,000000001.

Ich habe bereits NumberFormat.getNumberInstance() versucht, aber es formatiert zu 0. und ich weiß nicht, welchen Ausdruck man auf einer DecimalFormat verwenden soll, um mit einer beliebigen Nummer zu arbeiten.

+2

Aber was willst du, wenn es '1e-300' druckt? 300 Nullen? – kennytm

Antwort

10

Unter der Annahme, dass Sie 500 Nullen vor Ihrer Nummer wünschen, wenn Sie tun:

double d = 1E-500; 

dann können Sie verwenden:

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

FYI: Die kleinste Zahl mit doppelter Genauigkeit ist ~' 5e-324'. – kennytm

+0

Danke, ich wusste das nicht BTW, woher hast du diese Nummer aus? – ryanprayogo

+0

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

3

Sie können die maximale und minimale Anzahl von Ziffern im Bruchteil eines Zahlenformators mit setMinimumFractionDigits und setMaximumFractionDigits einstellen. Das sollte das Problem beheben.

2

Sie können es mit BigDecimals in Java 5 mit:

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

Beachten Sie, dass Sie, wenn Sie den doppelten Wert als String an erster Stelle haben, besser mit:

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

... wie in den BigDecimal javadocs erklärt.

Verwandte Themen