将非常小的双精度数转换为字符串。

5

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

例如,当我运行以下代码时:

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

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

2
但如果它打印出 1e-300,你想要什么?300个零? - kennytm
4个回答

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));

FYI:最小的双精度数是约为5e-324 - kennytm
谢谢,我不知道那个。顺便问一下,你从哪里得到这个数字的? - ryanprayogo
http://en.wikipedia.org/wiki/Double_precision_floating-point_format#IEEE_754_double_precision_binary_floating-point_format:_binary64 - kennytm

3

您可以使用 setMinimumFractionDigitssetMaximumFractionDigits 方法来设置数字格式化器小数部分的最大和最小位数,这样就可以解决问题了。


2
你可以使用 Java 5 中的 BigDecimal 来完成此操作:
System.out.println(new java.math.BigDecimal(Double.toString(1E-10)).stripTrailingZeros().toPlainString());

请注意,如果您最初的双精度值是字符串,最好使用以下方法:
System.out.println(new java.math.BigDecimal("1E-10").toPlainString());

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


-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接