使用printf的Java格式化宽度'$';不随数字移动

使用printf的Java格式化宽度'$';不随数字移动,java,formatting,printf,Java,Formatting,Printf,不知道如何放置“$”符号,以便在执行此操作时它随数字移动: System.out.printf("$%20.2f", test); 我明白了 我正在尝试将一系列数据格式化为3列 我曾尝试将$放在C中的%后面,但它不起作用。没有向要格式化的变量添加文本的快捷方式。 您必须分两步执行此操作,如下所示: System.out.printf("%20s", String.format("$%.2f", test)); 这可能有点混乱,但我通常只是为此设置了一个十进制格式化程序: import

不知道如何放置“$”符号,以便在执行此操作时它随数字移动:

    System.out.printf("$%20.2f", test);
我明白了

我正在尝试将一系列数据格式化为3列


我曾尝试将$放在C中的%后面,但它不起作用。

没有向要格式化的变量添加文本的快捷方式。
您必须分两步执行此操作,如下所示:

System.out.printf("%20s", String.format("$%.2f", test));

这可能有点混乱,但我通常只是为此设置了一个十进制格式化程序:

import java.text.DecimalFormat;
class Test {
    public static void main(String[] args) {
        // One-time setup (could be simpler, I've opted for readability).
        final String fmt20v2a = "$#################.00";
        final String fmt20v2b = "%21s";
        final DecimalFormat df20v2 = new DecimalFormat (fmt20v2a);

        // Usage
        System.out.printf(fmt20v2b + "\n", df20v2.format(74.1));
        System.out.printf(fmt20v2b + "\n", df20v2.format(999999.99));
} }

这会给您一点额外的工作来调整输出,但是设置通常只需要完成一次。其输出为:

              $74.10
          $999999.99

在我发布这篇文章之前的谷歌搜索中,我确实遇到了这个答案,但我不愿意使用它,因为我们还没有学会它。但不是说这是一个错误的方式,只是可能不会得到分数。谢谢凯皮尔。这个答案更恰当,更接近我们所学到的
              $74.10
          $999999.99