简而言之:
如果您想要去掉尾随的零以及避免与区域设置有关的问题,那么您应该使用:
double myValue = 0.00000021d;
DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setMaximumFractionDigits(340); //340 = DecimalFormat.DOUBLE_FRACTION_DIGITS
System.out.println(df.format(myValue)); //output: 0.00000021
解释:
为什么其他答案不适合我:
double myValue = 0.00000021d;
String.format("%s", myvalue); //output: 2.1E-7
使用 %f
,默认的小数精度为6位。否则你可以硬编码它,但如果你有更少的小数位,会导致额外的零被添加。例如:
double myValue = 0.00000021d;
String.format("%.12f", myvalue); // Output: 0.000000210000
通过使用setMaximumFractionDigits(0);
或%.0f
,您可以删除任何小数精度,这对于整数/长整数是可以的,但不适用于双精度
double myValue = 0.00000021d;
System.out.println(String.format("%.0f", myvalue)); // Output: 0
DecimalFormat 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
使用英文语言环境可以确保您在程序运行时获得小数点作为分隔符。
为什么要使用340来设置setMaximumFractionDigits
?有两个原因:
setMaximumFractionDigits
接受一个整数,但其实现最大允许的位数为DecimalFormat.DOUBLE_FRACTION_DIGITS
,其值为340。Double.MIN_VALUE = 4.9E-324
,因此使用340个数字可以确保不会舍入您的double并失去精度。
System.out.println("YOUR STRING" + YOUR_DOUBLE_VARIABLE);
- Shayan Amani