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

Java 我可以输出与printf()中相同数量的浮点数的两倍吗?,java,printf,println,Java,Printf,Println,例如,如果我不知道点(.)后面有多少个数字,我想在printf()中打印它们,不带零(1.200000)(同样在println()中)。如果是,如何使用?您可以使用参数,例如:%1.2f,但这是一个四舍五入的数字。我不确定这就是你想要的 class Test { public static void main(String[] args) { double arr[] = {1.2, 1.23, 1.234, 1.2345}; System.out

例如,如果我不知道点(.)后面有多少个数字,我想在printf()中打印它们,不带零(1.200000)(同样在println()中)。如果是,如何使用?

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

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]);
    }
}
你可以说,你的
BigDecimal
是更好的解决方案,但问题的最后是零

    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);
因此,您可以将此技巧用于您的案例:

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

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

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

%s
使用通常的
toString
方法将数字转换为字符串,该方法只包含必要数量的数字,以区分一个数字与它的邻居。

您的意思是如果
arr
{1.2,1.20,1.200,1.2000}/code>,您希望输出也是
1.21.20 1.200 1.2000
?不,我的意思是如果有一个双精度/浮点值数组,如果希望使用printf()输出它,但没有后续的零(1.200000)和舍入数(1.2345打印为1.23),如果您在代码中看到
1.2
,我不知道点(.)后有多少位,这个值实际上不是1.2。这与它非常接近,因为1.2不能准确地用二进制表示。所以,如果你真的不想要任何舍入,你不会得到1.2。您需要指定所需的“最大小数位数”。请详细说明“此技巧”。我不认为跟踪零会从
f
带到
snumber1
。这就是我一直在寻找的。谢谢
System.out.printf("%s", 1.2); // output: 1.2