我正在尝试格式化字符串,以便它始终以三的宽度打印出来,并在同一行结束,无论数字有多大。除 1 之外的所有数字都是十以下的小数;但是,当我打印十以上的小数时,宽度为四,并且结束于前一个数字的最后一位数字。我想让它们都在同一个位置结束,并在右侧对齐。如何在 Java 中使用 printf 来做到这一点?
[a 4.34]
[b 0.32]
[c 12.52]
我希望每个人都像这样排列
[a 4.34]
[b 0.32]
[c 12.5]
这是我已经拥有的打印行
for(int i = 0; i < 26;i++)
{
System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);
}
谢谢!
最佳答案
如果您想让结果宽度根据最宽的行而变化,请使用 user1544460 给出的答案,或者仅使用相同的 if-then-else 结构定义多个打印语句。如果您始终希望宽度相同(最大宽度),则需要在格式化字符串中指定更多数字。
“%3.2f”的意思是“我想要一个至少有 3 个空格的数字,其中两个我想要获取小数点后的值。”
改变
System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);
至
System.out.printf("[%c %5.2f]\n", letters[i], frequencies[i]);
假设最大值保留小数点后 3 位。
如果您希望它动态工作并调整大小以适合最大的行,请执行以下操作:
if(maxNum >= 100)
System.out.printf("[%c %5.2f]\n", letters[i], frequencies[i]);
else if(maxNum >= 10)
System.out.printf("[%c %4.2f]\n", letters[i], frequencies[i]);
else // If we get here, we've either coded something wrong, or it's less than 10.
System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);
关于java - 格式化字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725401/