我想向用户显示一个表
Name quantity Price Total
a 2 3.0 6.0
正确缩进。 此外,我需要处理所有参数的最大允许值,例如30表示名称,10表示剩余所有参数 我在java中的行下面执行:
System.out.println("Name\tquantity\tPrice\tTotal");
System.out.printf("%1$30s\t %.10d\t %.10f\t %.10f", product_name, productQuantity, itemprice, productQuantity*itemprice);
我收到以下错误:
java.util.IllegalFormatPrecisionException
答案 0 :(得分:0)
使用%-
格式填充右侧有空格的数字/字符串:
System.out.printf("%-30s %-10s %-10s %s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%-30s %-10d %-10.1f %-10.1f", "product", 2, (float) 6.1, 2 * 6.1);
结果:
Name quantity Price Total
product 2 6,1 12,2
此外,您的格式字符串中包含错误:
"%1$30s\t %.10d\t %.10f\t %.10f"
"%1$ <- here
1$
打破你的格式字符串,从而将格式参数移动1,所以product
参数(字符串)实际上代替了第二种格式arg(%.10d
),这是预期的一个数字。
因此,由于字符串格式化程序不支持.n
精度说明符,因此抛出IllegalFormatPrecisionException
。
<强> UPD。强>
为了消除该错误,您应该删除1$
说明符,或将其添加到所有的args中:
System.out.printf("%1$30s\t %2$10s\t %3$10s\t %4$10s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%1$30s\t %2$10d\t %3$10f\t %4$10f\n", "product", (int)2, (float)6, (float)2*6);
结果:
Name quantity Price Total
product 2 6,000000 12,000000
更精彩的格式:
System.out.printf("%1$30s\t %2$10s\t %3$10s\t %4$10s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%1$30s\t %2$10d\t %3$10.1f\t %4$10.1f\n", product, (int)amount, (float)price, (float)(amount * price));
给出:
Name quantity Price Total
product 2 6,1 12,2