在 Java 中打印 double,不包括无关紧要的零

Print double in Java excluding insignificant zeros

我需要打印四舍五入到小数点后可变位数的双精度数,以便不打印无关紧要的零。例如。我希望数字 123 和 123.4 都按原样打印——第一个没有小数点,第二个有小数点。如果小数点后多于有效数字,则该数字应截断为六位。

我描述的是 boost::locale::format 的默认行为,如果您将数字打印为 boost::locale::format("{1,number}") % double_value。我需要在 Java 中做同样的事情,最好使用 String.format。我尝试了 %f%g,但它们都至少打印了六位数字。

我要格式化的所有数字都在 [0.1, 30000] 范围内,因此在这里转换为科学形式应该不难。

按照说明使用 DecimalFormat here

DecimalFormat df = new DecimalFormat("#0.######");
df.format(0.912385);

使用:

String.format("%.2f", floatValue);

在 Java 中有多种格式化浮点数的方法。

首先,格式字符串允许您指定精度。以下代码

System.out.printf("%.2f - %.2f", 123, 123.4) 

会显示123.00 - 123.40。请注意,这并不完全是您要求的,因为显示的数字总是有两位小数。

要更好地控制数字格式,您可以使用 DecimalFormat class。以下代码具有您描述的行为:

DecimalFormat form = new DecimalFormat("#.##");
form.setRoundingMode(RoundingMode.HALF_UP);
System.out.printf("%s - %s", form.format(123), form.format(123.4));

输出:123 - 123.4.