【转载】format的用法。

简介: 以前没太注意这个用法,到网上找一个,copy过来,方便以后的查看。   "I see stuff like {0,-8:G2} passed in as a format string. What exactly does that do?" -- Very Confused String Fo...

以前没太注意这个用法,到网上找一个,copy过来,方便以后的查看。

 

"I see stuff like {0,-8:G2} passed in as a format string. What exactly does that do?" -- Very Confused String Formatter
The above format can be translated into this:
"{<argument index>[,<alignment>][:<formatString><zeros>]}"
argument index: This represent which argument goes into the string.
String.Format("first = {0};second = {1}", "apple", "orange");
String.Format("first = {1};second = {0}", "apple", "orange");
 
gives the following strings:
 
"first = apple; second = orange"
"first = orange; second = apple"

 
 
 
 
 
 
  
String.Format("{0,-10}", "apple");      //"apple     "
String.Format("{0,10}", "apple");       //"     apple"
format string (optional): This represent the format code.
Numeric format specifier is available here. (e.g. C, G...etc.)
Datetime format specifier is available here.
Enumeration format specifier is available here.
Custom Numeric format specifier is available here. (e.g. 0. #...etc.)
 
Custom formatting is kinda hard to understand. The best way I know how to explain something is via code:
 
int pos = 10;
int neg = -10;
int bigpos = 123456;
int bigneg = -123456;
int zero = 0;
string strInt = "120ab";
 
String .Format("{0:00000}", pos);      //"00010"
String .Format("{0:00000}", neg);      //"-00010"
String .Format("{0:00000}", bigpos);   //"123456"
String .Format("{0:00000}", bigneg);   //"-123456"
String .Format("{0:00000}", zero);     //"00000"
String .Format("{0:00000}", strInt);   //"120ab"
String .Format("{0:#####}", pos);      //"10"
String .Format("{0:#####}", neg);      //"-10"
String .Format("{0:#####}", bigpos);   //"123456"
String .Format("{0:#####}", bigneg);   //"-123456"
String .Format("{0:#####}", zero);     //""
String .Format("{0:#####}", strInt);   //"120ab"

 
While playing around with this, I made an interesting observation:
 
String .Format("{0:X00000}", pos);      //"A"
String .Format("{0:X00000}", neg);      //"FFFFFFF6"
String .Format("{0:X#####}", pos);      //"X10"
String .Format("{0:X#####}", neg);      //"-X10"
 
The "0" specifier works well with other numeric specifier, but the "#" doesn't. Umm... I think the "Custom Numeric Format String" probably deserve a whole post of it's own. Since this is only the "101" post, I'll move on to the next argument in the format string.
 
 
zeros (optional): It actually has a different meaning depending on which numeric specifier you use.
 
int neg = -10;
int pos = 10;

 
// C or c (Currency): It represent how many decimal place of zeros to show.
String .Format("{0:C4}", pos);      //"$10.0000"
String .Format("{0:C4}", neg);      //"($10.0000)"
 
// D or d (Decimal): It represent leading zeros
String .Format("{0:D4}", pos);      //"0010"
String .Format("{0:D4}", neg);      //"-0010"
 
// E or e (Exponential): It represent how many decimal places of zeros to show.
String .Format("{0:E4}", pos);      //"1.0000E+001"
String .Format("{0:E4}", neg);      //"-1.0000E+001"
 
// F or f (Fixed-point): It represent how many decimal places of zeros to show.
String .Format("{0:F4}", pos);      //"10.0000"
String .Format("{0:F4}", neg);      //"-10.0000"
 
// G or g (General): This does nothing
String.Format("{0:G4}", pos);      //"10"
String .Format("{0:G4}", neg);      //"-10"
 
// N or n (Number): It represent how many decimal places of zeros to show.
String.Format("{0:N4}", pos);      //"10.0000"
String .Format("{0:N4}", neg);      //"-10.0000"
 

 
// P or p (Percent): It represent how many decimal places of zeros to show.
String.Format("{0:P4}", pos);      //"1,000.0000%"
String .Format("{0:P4}", neg);      //"-1,000.0000%"
 

 
// R or r (Round-Trip): This is invalid, FormatException is thrown.
String.Format("{0:R4}", pos);      //FormatException thrown
String .Format("{0:R4}", neg);      //FormatException thrown
 

 
// X or x (Hex): It represent leading zeros
String.Format("{0:X4}", pos);      //"000A"
String .Format("{0:X4}", neg);      //"FFFFFFF6"
 

 
// nothing: This is invalid, no exception is thrown.
String .Format("{0:4}", pos));      //"4"
String .Format("{0:4}", neg));      //"-4"

 
In summary, there are four types of behaviour when using this <zeros> specifier:
Leading Zeros: D, X
Trailing Zeros: C, E, F, N, P
Nothing: G
Invalid: R, <empty>
 
Now, that we've gone through the valid specifiers, you can actually use this in more than just String.Format(). For example, when using this with Byte.ToString():
 
Byte b = 10;
b.ToString("D4");      //"0010"
b.ToString("X4");      //"000A"
Wow... this was way longer than I expected. The BCL team is having blog day today, I need to get back to posting something for the BCLWeblog.

 
<Editorial Comment>
One of the lesson I learnt from an earlier post is that, readers are not interested in a post that doesn't give you more information than what MSDN provides. Instead, readers are more interested in seeing stuff that are not available on MSDN. So when I was doing research to post about this topic, I found that MSDN actually talks about exactly what the {0,-8:G2} format does. It is just not easy to find nor centrally located.
For example, in the ToString MSDN Doc, the "Remarks" section covered some basic rules on what a "format string" is. In the String.Format MSDN Doc, the "Remarks" section actually have a pretty detail explaination of what the above format does. Furthermore, MSDN provides a format string overview as well as a the table that specifies all the values that are allowed.
This puts me in an interesting position when writing about this topic. MSDN actually have lots of info that cover it. But since I have also heard more than one person being confused about this topic, I decided to post a summary of the documents and more examples. Do you think this is useful? Should I just stick to posting exclusively on non-MSDN topics?
</Editorial Comment>
 
 
 
 
相关文章
String.format()函数的简单用法
1.String.format()函数的用法 2.常用转换符 3.常用标识
109 0
|
6月前
|
Java
String.format 的基本语法
`String.format` 是 Java 中的一个方法,用于格式化字符串。这个方法可以接受一个或多个参数,并根据指定的格式将它们格式化为字符串。 以下是 `String.format` 的基本语法: ```java String formattedString = String.format(formatString, arguments); ``` 其中: * `formatString` 是一个包含格式说明符的字符串。 * `arguments` 是要插入到格式字符串中的参数。 例如,假设我们想将两个整数格式化为一个字符串,其中整数之间用逗号分隔: ```java int
179 2
|
6月前
DATE_FORMAT函数使用
DATE_FORMAT函数使用
260 0
|
索引 Python
format格式化输出语法详解
hello,这里是Token_w的文章,主要讲解python的基础学习,希望对大家有所帮助 整理不易,感觉还不错的可以点赞收藏评论支持,感谢!
104 0
|
SQL
format函数
format函数
143 0
|
开发者 Python
字符串的 format 方法|学习笔记
快速学习字符串的 format 方法