我的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
为什么“$”会出现在左边那么多字符,因为它应该是在我的每个值的开头?
答案 0 :(得分: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.
还有其他方法。
答案 1 :(得分:0)
当您的格式显示为10
时,您指定的总长度为%10.2f
,并且您的$
字符位于格式化的数字之前。所以你得到了
"$" + " 5.00"
您可以使用DecimalFormat
来解决此问题:
DecimalFormat df = new DecimalFormat("$#.00");
String s = df.format(productOne);
以后
System.out.printf("%10s \n");
输出:
$5.00