我正在编写一种方法来打印我预先计算的值表。在表格的最后,我打印了一行
Sum of Deposits: $XXXX.XX
End of Year Total: $XXXX.XX
我的代码如下:
System.out.println("");
System.out.printf("%1$-10s $%2$-10.2f", "Sum of Deposits: ", (monthsToPay * monthDep));
System.out.println("");
System.out.printf("%1$-10s $%2$-10.2f", "End of Year Total: ", allDepTotal);
不幸的是,代替对齐以使数字在彼此之上(正确的列),填充格式似乎没有做任何事情。我可以把它改成
System.out.println("");
System.out.printf("%1$-10s $%2$-15.2f", "Sum of Deposits: ", (monthsToPay * monthDep));
System.out.println("");
System.out.printf("%1$-10s $%2$-15.2f", "End of Year Total: ", allDepTotal);
并且间距/格式不会改变。我究竟做错了什么?我已经尝试了所有我能想到的故障排除
答案 0 :(得分:0)
有两种格式是密钥:一种用于前面的字符串,另一种用于值。
"%-20.20s"
允许您根据需要格式化String,您只想将20更改为要将字符串格式化为的长度。前20个字符串定义为20的最小长度;如果它不符合这个,它将用空格填充String。第二个20将字符串的最大长度定义为20.如果不满足此值,它将从右侧开始截断字符串。前面的' - '表示填充右边的空格,给出左对齐的效果。
"%07.2f
允许您根据需要格式化浮点数。 .2
表示适合2位小数,如果需要填充0。 “07”部分适合数字的整个部分到4位小数。它基本上表示字符串的最小长度为7,但是因为你有2个小数位和一个小数点,这意味着数字的整个部分的最小长度是4.前面的0如果整个部分小于0则附加0 1000.但是,这并没有设置上限,但如果要强制执行此限制,可以通过获取浮点数的模数来轻松实现。
虽然删除数字的较低分辨率是可以接受的,但不建议强制执行上限,因为您丢失非常重要信息;特别是在金融领域。
System.out.printf("%-20.20s $%07.2f", "Sum of Deposits: ", 10.02 % 1000);
System.out.println("");
System.out.printf("%-20.20s $%07.2f", "End of Year Totals: ", 12300.02 % 1000);
答案 1 :(得分:0)
格式为%2$-10.2f
的减号会导致您的数字左对齐。更改宽度只会在数字之后打印更多空白,因此没有任何视觉差异。
只需使用%210.2f
(不使用减号)即可获得右对齐。阅读所有相关内容here。
答案 2 :(得分:0)
尝试:
System.out.println("");
System.out.printf("%1$-19s $%2$10.2f", "Sum of Deposits: ", (monthsToPay * monthDep));
System.out.println("");
System.out.printf("%1$-19s $%2$10.2f", "End of Year Total: ", allDepTotal);
第二个字面是19个字符宽。 - 标志意味着左对齐,而不是你想要的数字。您可能打算使用+。
我建议你看一下the formatter specification。