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