代码之家  ›  专栏  ›  技术社区  ›  cd1

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

  •  5
  • cd1  · 技术社区  · 14 年前

    我有一个非常小的数字,我想把它转换成一个带完整数字的字符串,不能以任何方式缩写。我不知道这个数字有多小。

    例如,当我运行时:

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

    它显示 1.0E-10 而不是0.00000001。

    我已经试过了 NumberFormat.getNumberInstance() 但它的格式是 0 . 我不知道在 DecimalFormat 使用任何数字。

    4 回复  |  直到 14 年前
        1
  •  10
  •   ryanprayogo    14 年前

    假设您在执行以下操作时希望在数字前面有500个零:

    double d = 1E-500;
    

    然后您可以使用:

    double d = 1E-10;
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(Integer.MAX_VALUE);
    System.out.println(nf.format(d));
    
        2
  •  3
  •   twolfe18    14 年前

    您可以使用 setMinimumFractionDigits setMaximumFractionDigits . 这样可以解决问题。

        3
  •  2
  •   Carl Desborough    14 年前

    您可以使用Java 5中的双小数来使用:

    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中所述。

        4
  •  -2
  •   Freiheit    14 年前