我可以输出与 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);
但是如果您将 BigDecimal 数字作为字符串输入,将打印出此字符串的精度:
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
方法将数字转换为字符串,该方法仅包含区分数字与其相邻数字所需的数字。
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);
但是如果您将 BigDecimal 数字作为字符串输入,将打印出此字符串的精度:
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
方法将数字转换为字符串,该方法仅包含区分数字与其相邻数字所需的数字。