java - 格式化字符串输出

标签 java string format printf string-formatting

我正在尝试格式化字符串,以便它始终以三的宽度打印出来,并在同一行结束,无论数字有多大。除 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/

相关文章:

java - 如何从 Java 代码获取 Ganglia 指标

java - 在 apache http 客户端中设置超时

javascript - 如何使用 parseFloat 将字符串转换为数字?

r - 来自 csv 的 R 中的 2 行标题

dart - 如何设置Dart小数点后的最小位数?

perl - 如何转换 yyyy-mm-dd hh :mm:ss into UTC in Perl?

java - 将数组传递给方法(java)

java - 如何从java代码打开模拟器shell来确定系统调用事件?

c - 为什么这个非空终止字符串被正确打印

c - 如何定位字符串中第一次出现的字符串