如何在不使用Java的科学表示法的情况下打印双值?我想用Java打印一个不带指数形式的双值。double dexp = 12345678;System.out.println("dexp: "+dexp);它显示了这个E符号:1.2345678E7.我想把它印成这样:12345678防止这种情况的最好方法是什么?
3 回答

慕少森
TA贡献2019条经验 获得超9个赞
简言之:
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
使用英语区域设置可以确保您在程序运行的任何地方都能得到小数点分隔符。
setMaximumFractionDigits
?
setMaximumFractionDigits
接受整数,但其实现的最大位数允许为 DecimalFormat.DOUBLE_FRACTION_DIGITS
等于340 Double.MIN_VALUE = 4.9E-324
因此,对于340位数字,您肯定不会舍入你的双倍和失去精度。
添加回答
举报
0/150
提交
取消