2010-01-20 45 views
5

我有一个非常小的数字,我想将其转换为具有完整数字的字符串,而不是以任何方式缩写。我不知道这个数字有多小。将非常小的双倍转换为字符串

例如,当我运行:

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

它显示1.0E-10代替0.000000001。我已经试过NumberFormat.getNumberInstance(),但它的格式为0。我不知道在DecimalFormat上使用什么表达式来处理任何数字。

+2

但是如果打印'1e-300',你想要什么? 300零? – kennytm 2010-01-20 18:18:25

回答

10

假设你想在你的电话号码的前500个零,当你做:

double d = 1E-500; 

那么你可以使用:

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

仅供参考:最小的双精度数字是〜'5e-324'。 – kennytm 2010-01-20 19:36:34

+0

谢谢,我不知道。 顺便说一句,你从哪里得到这个数字? – ryanprayogo 2010-01-20 19:44:14

+0

http://en.wikipedia.org/wiki/Double_precision_floating-point_format#IEEE_754_double_precision_binary_floating-point_format:_binary64 – kennytm 2010-01-21 03:55:33

3

您可以使用setMinimumFractionDigitssetMaximumFractionDigits来设置数字格式小数的最大和最小位数。应该解决这个问题。

2

可以使用与BigDecimals的做它在Java 5中:

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

请注意,如果您将double值作为字符串放在第一位,则最好使用:

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

......正如BigDecimal javadocs中所解释的那样。