我有这段代码:
private String padWithZeroRightToPeriod(String serverFormat, float unformattedNumber, int index) {
int nDigits = getNumberOfDigitsAfterPeriod(serverFormat);
String floatingFormat = "%4." + nDigits + "f";
String formattedPrice = String.format(floatingFormat, unformattedNumber);
当unformattedNumber
为846
时,为什么结果为" 846"
(空格,然后是三位数)?
%4.
是什么意思?
答案 0 :(得分:2)
docs for String.format
会向您推荐this documentation on format strings,其中包含:
常规,字符和数字类型的格式说明符具有以下语法:
%[argument_index$][flags][width][.precision]conversion
可选的 argument_index 是十进制整数,表示参数列表中参数的位置。第一个参数由" 1 $"引用,第二个参数由" 2 $"等引用。
可选的标志是一组修改输出格式的字符。有效标志集取决于转换。
可选的 width 是一个正十进制整数,表示要写入输出的最小字符数。
可选的精度是一个非负十进制整数,通常用于限制字符数。具体行为取决于转换。
所需的转换是一个字符,指示如何格式化参数。给定参数的有效转换集取决于参数的数据类型。
在您的示例输出中,似乎getNumberOfDigitsAfterPeriod
正在退回0
,因此您的格式字符串为%4.0f
。所以:
$
之后没有4
)4
)0
)f
)因此,846输出为" 846"
,因为宽度为4.所讨论的宽度是总输出的字符数。这是一个不同的例子:Live Copy
public class Example {
public static void main(String args[]) {
System.out.println(String.format("%8.2f", 846.0));
System.out.println(String.format("%8.2f", 42.4));
}
}
输出:
846.00 42.40
请注意,每个长度都是八个字符。