如何在不使用Java的科学表示法的情况下打印双值?

如何在不使用Java的科学表示法的情况下打印双值?

我想用Java打印一个不带指数形式的双值。

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

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

我想把它印成这样:12345678

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


慕的地8271018
浏览 393回答 3
3回答

慕村225694

你可以用printf()带着%f:double dexp = 12345678;System.out.printf("dexp: %f\n", dexp);这个会打印出来dexp: 12345678.000000..如果不想要小数部分,请使用System.out.printf("dexp: %.0f\n", dexp);中解释的格式说明语言。文献资料.默认toString()您的原始代码中使用的格式将被详细说明。这里.

慕少森

简言之:如果您想要消除尾随零和区域设置问题,那么您应该使用:double myValue = 0.00000021d;DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); df.setMaximumFractionDigits(340); // 340 = DecimalFormat.DOUBLE_FRACTION_DIGITSSystem.out.println(df.format(myValue));  // Output: 0.00000021说明:为什么其他答案不适合我:Double.toString()或System.out.println或FloatingDecimal.toJavaFormatString如果双倍小于10^-3或大于或等于10^7,则使用科学符号。用%f,默认的十进制精度为6,否则可以硬编码,但如果小数较少,则会增加额外的零。例子:double myValue = 0.00000021d;String.format("%.12f", myvalue); // Output: 0.000000210000用setMaximumFractionDigits(0);或%.0f删除任何十进制精度,对于整数/长是可以的,但对于Double则不行:double myValue = 0.00000021d;System.out.println(String.format("%.0f", myvalue));  // Output: 0DecimalFormat df = new DecimalFormat("0");System.out.println(df.format(myValue)); // Output: 0通过使用DecimalFormat,您是本地依赖的。在法语地区,十进制分隔符是逗号,而不是点:double myValue = 0.00000021d;DecimalFormat df = new DecimalFormat("0");df.setMaximumFractionDigits(340); System.out.println(df.format(myvalue)); // Output: 0,00000021使用英语区域设置可以确保您在程序运行的任何地方都能得到小数点分隔符。为什么要使用340setMaximumFractionDigits?原因有二:setMaximumFractionDigits接受整数,但其实现的最大位数允许为DecimalFormat.DOUBLE_FRACTION_DIGITS等于340Double.MIN_VALUE = 4.9E-324因此,对于340位数字,您肯定不会舍入你的双倍和失去精度。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java