这些符号字符串是什么意思:%02d%01d?

dRe*_*f90 23 java printf

我正在查看类似于以下的代码行:

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Run Code Online (Sandbox Code Playgroud)

我认为符号字符串是指每小时,每分钟等显示的数字字符数 - 或类似的东西,我不完全确定.

通常我可以想出这种事情,但我一直无法在谷歌上找到任何有用的参考搜索"%02d%01d".谁能够为我揭开这一点?

Ana*_*nax 44

而不是谷歌搜索%02d你应该一直在寻找sprintf()功能.

%02d 表示"格式化带有2位数的整数,左边用零填充",所以:

Format  Data   Result
%02d    1      01
%02d    11     11

  • 跟进给出的示例,“格式:%02d,数据:111,结果:111”。该格式将确保至少 2 个十进制数字,如果小数位数较少,则使用前导零;如果小数位数较多,则保留现有的数字。 (2认同)

pol*_*nts 28

他们正在格式化String.Java特定语法在java.util.Formatter.

一般语法如下:

   %[argument_index$][flags][width][.precision]conversion
Run Code Online (Sandbox Code Playgroud)

%02d执行十进制整数转换d,格式为零填充(0标志),宽度2.因此,int值为的参数7将被格式化"07"为a String.

您可能还会在例如中看到此格式字符串String.format.


常用格式

这些只是一些常用的格式,并没有详尽地涵盖语法.

零填充数字

System.out.printf("Agent %03d to the rescue!", 7);
// Agent 007 to the rescue!
Run Code Online (Sandbox Code Playgroud)

理由宽度

您可以使用该-标志进行左对齐; 否则这是正确的理由.

for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
    System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
}
Run Code Online (Sandbox Code Playgroud)

这打印如下:

java.version                   :                                 1.6.0_07
java.vm.name                   :               Java HotSpot(TM) Client VM
java.vm.vendor                 :                    Sun Microsystems Inc.
java.vm.specification.name     :       Java Virtual Machine Specification
java.runtime.name              :          Java(TM) SE Runtime Environment
java.vendor.url                :                     http://java.sun.com/
Run Code Online (Sandbox Code Playgroud)

对于更强大的消息格式,您可以使用java.text.MessageFormat.%n是换行符转换(见下文).

十六进制转换

System.out.println(Integer.toHexString(255));
// ff

System.out.printf("%d is %<08X", 255);
// 255 is 000000FF
Run Code Online (Sandbox Code Playgroud)

请注意,这也使用<相对索引(见下文).

浮点格式

System.out.printf("%+,010.2f%n", 1234.567);
System.out.printf("%+,010.2f%n", -66.6666);
// +01,234.57
// -000066.67
Run Code Online (Sandbox Code Playgroud)

要获得更强大的浮点格式,请DecimalFormat改用.

%n 用于特定于平台的行分隔符

System.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World
Run Code Online (Sandbox Code Playgroud)

%%对于一个实际的 - %签名

System.out.printf("It's %s%% guaranteed!", 99.99);
// It's 99.99% guaranteed!
Run Code Online (Sandbox Code Playgroud)

请注意,double文字99.99是自动装箱的Double,在其toString()上定义了字符串转换.

n$ 用于显式参数索引

System.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
    "Du", "hast", "mich"
);
// Du! Du hast! Du hast mich!
Run Code Online (Sandbox Code Playgroud)

< 用于相对索引

System.out.format("%s?! %<S?!?!?", "Who's your daddy");
// Who's your daddy?! WHO'S YOUR DADDY?!?!?
Run Code Online (Sandbox Code Playgroud)

相关问题


Ale*_*rMP 21

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

相同的规则应该适用于Java.

在您的情况下,它表示输出2位或更多位的整数值,如果小于或等于9,则第一位为零


归档时间:

查看次数:

86311 次

最近记录:

9 年,9 月 前