为什么%4 ?给我的号码加空格



我有这样的代码:

private String padWithZeroRightToPeriod(String serverFormat, float unformattedNumber, int index) {
    int nDigits = getNumberOfDigitsAfterPeriod(serverFormat);
    String floatingFormat = "%4." + nDigits + "f";
    String formattedPrice = String.format(floatingFormat, unformattedNumber);

unformattedNumber846调用时,为什么结果是" 846"(一个空格,然后是三位数字)?

%4.是什么意思?

String.format的文档让您参考这个关于格式字符串的文档,它说:

通用类型、字符类型和数字类型的格式说明符具有以下语法:

%[argument_index$][flags][width][.precision]conversion

可选参数argument_index是一个十进制整数,表示实参在实参列表中的位置。第一个参数由"1$&"引用,第二个参数由"2$&"引用,以此类推。

可选的标志是一组修改输出格式的字符。有效标志的集合取决于转换。

可选的宽度是一个正十进制整数,表示写入输出的最小字符数。

可选的精度是一个非负十进制整数,通常用于限制字符的数量。具体的行为取决于转换。

所需的转换是一个字符,指示参数应该如何格式化。给定实参的有效转换集取决于实参的数据类型。

从您的示例输出中,似乎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.0042.40 之前

最新更新