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

时间:2010-07-31 10:21:56

标签: java printf

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

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);

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

通常情况下,我可以解决这类问题,但我一直无法在谷歌上找到任何有用的参考搜索“%02d%01d”。有谁能够为我阐明这一点?

6 个答案:

答案 0 :(得分:43)

您应该一直在搜索%02d功能,而不是使用Google搜索sprintf()

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

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

答案 1 :(得分:26)

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

一般语法如下:

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

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

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


常用格式

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

数字的零填充

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

对齐宽度

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

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

这打印如下:

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/

要获得更强大的邮件格式,您可以使用java.text.MessageFormat%n是换行符转换(见下文)。

十六进制转换

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

System.out.printf("%d is %<08X", 255);
// 255 is 000000FF

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

浮点格式

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

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

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

System.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World

%%表示实际的% - 符号

System.out.printf("It's %s%% guaranteed!", 99.99);
// It's 99.99% guaranteed!

请注意,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!

<用于相对索引

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

相关问题

答案 2 :(得分:21)

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

相同的规则应适用于Java。

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

答案 3 :(得分:0)

亚历山大的回答是指完整的文档......

问题中的简单示例只是用2位数字打印出这些值 - 必要时附加前导0。

答案 4 :(得分:0)

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

这篇文章是关于printf函数的,有几种语言,从50年代到今天。

答案 5 :(得分:0)

是您在格式字符串中放入的特殊字符,例如在C语言printf和scanf(和系列)中,基本上说“这是其他东西的占位符,而不是按字面打印/阅读。“

  

例如,printf的格式字符串中的(%02d)是整数变量的占位符,将以十进制(%02d)打印并填充至少两位数,必要时带零。

     
    

实际的整数由您在函数的参数中提供,例如: printf("%02d",5);     会在屏幕上打印05(%01d)也会有类似的效果

  

同样适用于Java和其他语言:)