是否有像Double.toString一样的DecimalFormat?

时间:2017-11-12 17:41:55

标签: java floating-point formatting

我想找到DecimalFormat的格式字符串(模式),就像将双数转换为字符串一样,例如使用Double.toString(double)

示例:

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

这种格式是否存在?

1 个答案:

答案 0 :(得分:1)

从目前为止我能够确定的,没有单一的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和无穷大有不同的结果,但这些可以作为特殊情况处理。