Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么`%4.`给我的号码加空格?_Java_String_Formatting_Format_String Formatting - Fatal编程技术网

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

Java 为什么`%4.`给我的号码加空格?,java,string,formatting,format,string-formatting,Java,String,Formatting,Format,String Formatting,我有以下代码: private String padWithZeroRightToPeriod(String serverFormat, float unformattedNumber, int index) { int nDigits = getNumberOfDigitsAfterPeriod(serverFormat); String floatingFormat = "%4." + nDigits + "f"; String formattedPrice = St

我有以下代码:

private String padWithZeroRightToPeriod(String serverFormat, float unformattedNumber, int index) {
    int nDigits = getNumberOfDigitsAfterPeriod(serverFormat);
    String floatingFormat = "%4." + nDigits + "f";
    String formattedPrice = String.format(floatingFormat, unformattedNumber);
当调用
未格式化的数字
846
时,为什么结果
为“846”
(一个空格,然后是三位数字)

%4.
的意思是什么?

指的是,它说:

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

%[argument_index$][flags][width][.precision]转换

可选参数_索引是一个十进制整数,指示参数在参数列表中的位置。第一个参数由“1$”引用,第二个参数由“2$”引用,以此类推

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

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

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

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

从您的示例输出中,似乎
getNumberOfDigitAfterPeriod
正在返回
0
,因此您的格式字符串是
%4.0f
。因此:

  • 它没有参数索引(在
    4
    之后没有
    $
  • 它有一个宽度(
    4
  • 它具有精度(
    0
  • 当然,它有一个转换(
    f
因此846输出为
“846”
,因为宽度为4。讨论的宽度是输出的字符总数。这里有一个不同的例子:

输出:

846.00 42.40 846 42.40
请注意,每一个都有八个字符长。

您看过Javadocs了吗?您是否尝试过任何其他输入来理解该行为?无法在java文档中很好地搜索它。使用什么术语?字符串格式化程序没有帮助“没有帮助”是什么意思<代码>%[argument_index$][flags][width][precision]转换
@BoristSpider这意味着我不清楚
%[argument_index$][flags][width]
。我可以尝试几个例子,但我想了解行为,而不是猜测。不,但他的例子做到了。
它有一个宽度(4)
。42.4的宽度是否为4?@user1065869:是,宽度是“写入输出的最小字符数”(例如,总字符数)。但是考虑到您的示例输出
“846”
),显然
GetNumberOfDigitAfterPeriod
正在返回
0
String.format(“%4.0f”,42.4)
返回
“42”
(两个空格后跟42)。 846.00 42.40