如何使用 Java 在没有科学计数法的情况下打印双精度值?

新手上路,请多包涵

我想在 Java 中打印一个没有指数形式的双精度值。

 double dexp = 12345678;
System.out.println("dexp: "+dexp);

它显示了这个 E 符号: 1.2345678E7

我希望它像这样打印: 12345678

防止这种情况的最佳方法是什么?

原文由 Despicable 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

您可以将 printf()%f 一起使用:

 double dexp = 12345678;
System.out.printf("dexp: %f\n", dexp);

这将打印 dexp: 12345678.000000 。如果您不想要小数部分,请使用

System.out.printf("dexp: %.0f\n", dexp);

%.0f 中的 0 表示小数部分有 0 个位置,即没有小数部分。如果您想打印具有所需小数位数的小数部分,那么只需提供这样的数字而不是 0 %.8f 。默认情况下,小数部分最多打印 6 个小数位。

这使用 文档 中解释的格式说明符语言。

原始代码中使用的默认 toString() 格式在 此处 详细说明。

原文由 NPE 发布,翻译遵循 CC BY-SA 4.0 许可协议

Java 防止 E 符号出现在双精度数中:

将双精度数转换为普通数的五种不同方法:

 import java.math.BigDecimal;
import java.text.DecimalFormat;

public class Runner {
    public static void main(String[] args) {
        double myvalue = 0.00000021d;

        //Option 1 Print bare double.
        System.out.println(myvalue);

        //Option2, use decimalFormat.
        DecimalFormat df = new DecimalFormat("#");
        df.setMaximumFractionDigits(8);
        System.out.println(df.format(myvalue));

        //Option 3, use printf.
        System.out.printf("%.9f", myvalue);
        System.out.println();

        //Option 4, convert toBigDecimal and ask for toPlainString().
        System.out.print(new BigDecimal(myvalue).toPlainString());
        System.out.println();

        //Option 5, String.format
        System.out.println(String.format("%.12f", myvalue));
    }
}

这个程序打印:

 2.1E-7
.00000021
0.000000210
0.000000210000000000000001085015324114868562332958390470594167709350585
0.000000210000

这些都是相同的值。

提示:如果您对为什么这些随机数字在双精度值中出现超过某个阈值感到困惑,此视频解释了:computerphile why does 0.1 + 0.2 equal 0.30000000000001

http://youtube.com/watch?v=PZRI1IfStY0

原文由 Eric Leschinski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题