Java 我可以输出与printf()中相同数量的浮点数的两倍吗?
例如,如果我不知道点(.)后面有多少个数字,我想在printf()中打印它们,不带零(1.200000)(同样在println()中)。如果是,如何使用?您可以使用参数,例如: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
%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