有没有一个十进制格式的行为类似于Double.toString



我想为DecimalFormat找到一种格式字符串(模式(,其工作方式类似于将双精度数转换为字符串,例如使用 Double.toString(double) .

例子:

1 → "1.0"
123456.789 → "123456.789"
1e50 → "1.0e50"

这种格式存在吗?

从我目前所能确定的情况来看,没有单一的DecimalFormat模式可以模拟Double.toString(这对我来说似乎很奇怪(,但是它可以通过两种模式和一个幅度范围来完成,如Double.toString(double) javadoc 中所述。

这是一种似乎可以完成这项工作的方法:

public static String fmt(final double d) {
    final double a = Math.abs(d);
    final boolean normal = a == 0 || a >= 1e-3 && a < 1e7;
    final DecimalFormat f = new DecimalFormat(normal ?
            "0.0##################" :
            "0.0#################E0");
    return f.format(d);
}

对于 NaN 和无穷大,它有不同的结果,但这些可以作为特殊情况处理。

最新更新