1

我的 AP 书说,如果您将“$”放在 % 之前,它将输出任何带有“$”的值,据我所知,这被称为标志。然而,当我这样做时,我得到了一些不同的东西,例如:

public void printResults(){
    System.out.printf("%10s %10s %10s \n", "Item:", "Cost:", "Price:");
    System.out.printf("%10d $%10.2f %10.2f \n", n++ ,productOne, productOne);
    System.out.printf("%10d $%10.2f %10.2f \n", n++ ,productTwo, productTwo+=productOne);
    System.out.printf("%10d $%10.2f %10.2f", n++ ,productThree, productThree+=productTwo);
}

这输出:

 Item:      Cost:     Price: 
     1 $      5.00       5.00 
     2 $      5.00      10.00 
     3 $      5.00      15.00

代替:

 Item:      Cost:     Price: 
     1       $5.00       5.00 
     2       $5.00      10.00 
     3       $5.00      15.00 

为什么“$”应该在我的每个值的开头时向左移动这么多字符?

4

2 回答 2

0

因为这

"%10d $%10.2f 

表示一个数字用完 10 个字符(数字在 10 列的右边)

然后放一个空格和一个美元符号

然后再用 10 个字符换另一个小数点后 2 位数字并将数字推到右侧。

如果您希望数字旁边的美元符号,您将不得不使用

String one = NumberFormat.getCurrencyInstance().format(productOne);
System.out.printf("%10d %11s %10.2f \n", n++ ,one, productOne);

或以其他方式格式化数字,例如,也许

String one = "$" + productOne; // this won't do exactly 2 fractional digits.

还有其他方法。

于 2013-10-11T20:10:08.917 回答
0

10您指定了格式表示时的总长度: %10.2f,并且您的$字符在格式化数字之前。所以你得到了

"$" + "      5.00"

您可以使用 aDecimalFormat来解决此问题:

DecimalFormat df = new DecimalFormat("$#.00");
String s = df.format(productOne);

然后

System.out.printf("%10s \n");

输出:

     $5.00
于 2013-10-11T20:14:28.483 回答