我可以输出与 printf() 中相同数量的浮点数吗?

Can I output the same amount of floating numbers in double that it number has in printf()?

class Test
{
    public static void main(String[] args)
    {
        double arr[] = {1.2, 1.23, 1.234, 1.2345};
        System.out.printf("%f %f %f %f", arr[0], arr[1], arr[2], arr[3]);
    }
}

例如,如果我不知道点 (.) 之后有多少数字,并且我想在 printf() 中打印所有数字而不带零 (1.200000)(同样在 println() 中)。如果可以,怎么做?

你可以使用参数,例如:%1.2f,但是这个数字是四舍五入的。我不确定这是不是你想要的。

    float f = 1.225f;
    System.out.printf("%f \t %1.2f \t %1.4f", f,f,f);

可以吗 BigDecimal 是更好的解决方案,但末尾有零的问题。

    float f = 1.225f;
    BigDecimal number1 = new BigDecimal(f);
    BigDecimal number2 = new BigDecimal(f).setScale(2, RoundingMode.HALF_DOWN);
    BigDecimal number3 = new BigDecimal(f).setScale(4, RoundingMode.HALF_DOWN);
    System.out.println(number1+"\n"+number2+"\n"+number3);

但是如果您将 Bi​​gDecimal 数字作为字符串输入,将打印出此字符串的精度:

    BigDecimal bd1 = new BigDecimal("1.123");
    BigDecimal bd2 = new BigDecimal("1.123000");
    System.out.println(bd1+"\n"+bd2);

所以你可以在你的案例中使用这个技巧:

    float f = 1.225000f;
    BigDecimal snumber1 = new BigDecimal(f+"");
    System.out.println(snumber1);

使用 %s 作为格式化程序:

System.out.printf("%s", 1.2); // output: 1.2

%s 使用通常的 toString 方法将数字转换为字符串,该方法仅包含区分数字与其相邻数字所需的数字。