XAF項目中有個DisplayFormat和EditMask設置,其中:
任何地方看到的DisplayFormat都是用于顯示時,即非修改狀態的編輯器,顯示值的格式。
EditMask是指編輯時的格式,編輯時是指控件在光標在這個控件上時,即獲得焦點時。
事實上我們可以簡單的理解為程序在運行中是調用了 value.ToString(”格式化字符串")來得到結果的,知道了這個原理,就可以系統化的得到幫助列表了。
在普通的C#程序中,我們可以通過下面的代碼來觀察輸入與輸出結果,這里用到的格式化字符串也適用于XAF的DisplayFormat、EditMask的設置。
public static string DecimalToString(decimal d)
{
return d.ToString("#0.######");
}
這個的顯示很簡單給幾個例子就懂了,注意第一個結果,是會四舍五入的
private void button1_Click(object sender, EventArgs e)
{
decimal d0 = 0.0000006m;
decimal d1 = 0.005000m;
decimal d2 = 1.00005m;
decimal d3 = 200.00000m;
decimal d4 = 200.00006m;
Console.WriteLine(DecimalToString(d0));
Console.WriteLine(DecimalToString(d1));
Console.WriteLine(DecimalToString(d2));
Console.WriteLine(DecimalToString(d3));
Console.WriteLine(DecimalToString(d4));
}
結果如下:
0.000001
0.005
1.00005
200
200.00006
字符型轉換 轉為字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16進制)
12345.ToString("p"); //生成 1,234,500.00%
string.Format 格式化時間,貨幣
1、格式化貨幣(跟系統的環境有關,中文系統默認格式化人民幣,英文系統格式化美元)
string.Format("{0:C}",0.2) 結果為:¥0.20 (英文操作系統結果:$0.20)
默認格式化小數點后面保留兩位小數,如果需要保留一位或者更多,可以指定位數
string.Format("{0:C1}",23.15) 結果為:¥23.2 (截取會自動四舍五入)
格式化多個Object實例
string.Format("市場價:{0:C},優惠價{1:C}",23.15,19.82)
2、格式化十進制的數字(格式化成固定的位數,位數不能少于未格式化前,只支持整形)
string.Format("{0:D3}",23) 結果為:023
string.Format("{0:D2}",1223) 結果為:1223,(精度說明符指示結果字符串中所需的最少數字個數。)
3、用分號隔開的數字,并指定小數點后的位數
string.Format("{0:N}", 14200) 結果為:14,200.00 (默認為小數點后面兩位)
string.Format("{0:N3}", 14200.2458) 結果為:14,200.246 (自動四舍五入)
4、格式化百分比
string.Format("{0:P}", 0.24583) 結果為:24.58% (默認保留百分的兩位小數)
string.Format("{0:P1}", 0.24583) 結果為:24.6% (自動四舍五入)
5、零占位符和數字占位符
string.Format("{0:0000.00}", 12394.039) 結果為:12394.04
string.Format("{0:0000.00}", 194.039) 結果為:0194.04
string.Format("{0:###.##}", 12394.039) 結果為:12394.04
string.Format("{0:####.#}", 194.039) 結果為:194
下面的這段說明比較難理解,多測試一下實際的應用就可以明白了。
零占位符:
如果格式化的值在格式字符串中出現“0”的位置有一個數字,則此數字被復制到結果字符串中。小數點前最左邊的“0”的位置和小數點后最右邊的“0”的位置確定總在結果字符串中出現的數字范圍。
“00”說明符使得值被舍入到小數點前最近的數字,其中零位總被舍去。
數字占位符:
如果格式化的值在格式字符串中出現“#”的位置有一個數字,則此數字被復制到結果字符串中。否則,結果字符串中的此位置不存儲任何值。
請注意,如果“0”不是有效數字,此說明符永不顯示“0”字符,即使“0”是字符串中唯一的數字。如果“0”是所顯示的數字中的有效數字,則顯示“0”字符。
“##”格式字符串使得值被舍入到小數點前最近的數字,其中零總被舍去。
6、日期格式化
string.Format("{0:d}",System.DateTime.Now) 結果為:2009-3-20 (月份位置不是03)
string.Format("{0:D}",System.DateTime.Now) 結果為:2009年3月20日
string.Format("{0:f}",System.DateTime.Now) 結果為:2009年3月20日 15:37
string.Format("{0:F}",System.DateTime.Now) 結果為:2009年3月20日 15:37:52
string.Format("{0:g}",System.DateTime.Now) 結果為:2009-3-20 15:38
string.Format("{0:G}",System.DateTime.Now) 結果為:2009-3-20 15:39:27
string.Format("{0:m}",System.DateTime.Now) 結果為:3月20日
string.Format("{0:t}",System.DateTime.Now) 結果為:15:41
string.Format("{0:T}",System.DateTime.Now) 結果為:15:41:50
更詳細的說明請下面微軟對此的說明或者上msdn上查詢。
微軟MSDN對string.format的方法說明:
名稱 說明
String.Format (String, Object) 將指定的 String 中的格式項替換為指定的 Object 實例的值的文本等效項。
String.Format (String, Object[]) 將指定 String 中的格式項替換為指定數組中相應 Object 實例的值的文本等效項。
String.Format (IFormatProvider, String, Object[]) 將指定 String 中的格式項替換為指定數組中相應 Object 實例的值的文本等效項。指定的參數提供區域性特定的格式設置信息。
String.Format (String, Object, Object) 將指定的 String 中的格式項替換為兩個指定的 Object 實例的值的文本等效項。
String.Format (String, Object, Object, Object) 將指定的 String 中的格式項替換為三個指定的 Object 實例的值的文本等效項。
標準數字格式字符串
格式說明符 名稱 說明
C 或 c
貨幣
數字轉換為表示貨幣金額的字符串。轉換由當前 NumberFormatInfo 對象的貨幣格式信息控制。
精度說明符指示所需的小數位數。如果省略精度說明符,則使用當前 NumberFormatInfo 對象給定的默認貨幣精度。
D 或 d
十進制數
只有整型才支持此格式。數字轉換為十進制數字 (0-9) 的字符串,如果數字為負,則前面加負號。
精度說明符指示結果字符串中所需的最少數字個數。如果需要的話,則用零填充該數字的左側,以產生精度說明符給定的數字個數。
E 或 e
科學記數法(指數)
數字轉換為“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每個“d”表示一個數字 (0-9)。如果該數字為負,則該字符串以減號開頭。小數點前總有一個數字。
精度說明符指示小數點后所需的位數。如果省略精度說明符,則使用默認值,即小數點后六位數字。
格式說明符的大小寫指示在指數前加前綴“E”還是“e”。指數總是由正號或負號以及最少三位數字組成。如果需要,用零填充指數以滿足最少三位數字的要求。
F 或 f
定點
數字轉換為“-ddd.ddd…”形式的字符串,其中每個“d”表示一個數字 (0-9)。如果該數字為負,則該字符串以減號開頭。
精度說明符指示所需的小數位數。如果忽略精度說明符,則使用當前 NumberFormatInfo 對象給定的默認數值精度。
G 或 g
常規
根據數字類型以及是否存在精度說明符,數字會轉換為定點或科學記數法的最緊湊形式。如果精度說明符被省略或為零,則數字的類型決定默認精度,如下表所示。
Byte 或 SByte:3
Int16 或 UInt16:5
Int32 或 UInt32:10
Int64 或 UInt64:19
Single:7
Double:15
Decimal:29
如果用科學記數法表示數字時指數大于 -5 而且小于精度說明符,則使用定點表示法;否則使用科學記數法。如果要求有小數點,并且忽略尾部零,則結果包含小數點。如果精度說明符存在,并且結果的有效數字位數超過指定精度,則通過舍入刪除多余的尾部數字。
上述規則有一個例外:如果數字是 Decimal 而且省略精度說明符時。在這種情況下總使用定點表示法并保留尾部零。
使用科學記數法時,如果格式說明符是“G”,結果的指數帶前綴“E”;如果格式說明符是“g”,結果的指數帶前綴“e”。
N 或 n
數字
數字轉換為“-d,ddd,ddd.ddd…”形式的字符串,其中“-”表示負數符號(如果需要),“d”表示數字 (0-9),“,”表示數字組之間的千位分隔符,“.”表示小數點符號。實際的負數模式、數字組大小、千位分隔符以及十進制分隔符由當前 NumberFormatInfo 對象指定。
精度說明符指示所需的小數位數。如果忽略精度說明符,則使用當前 NumberFormatInfo 對象給定的默認數值精度。
P 或 p
百分比
數字轉換為由 NumberFormatInfo.PercentNegativePattern 或 NumberFormatInfo.PercentPositivePattern 屬性定義的、表示百分比的字符串,前者用于數字為負的情況,后者用于數字為正的情況。已轉換的數字乘以 100 以表示為百分比。
精度說明符指示所需的小數位數。如果忽略精度說明符,則使用當前 NumberFormatInfo 對象給定的默認數值精度。
R 或 r
往返過程
只有 Single 和 Double 類型支持此格式。往返過程說明符保證轉換為字符串的數值再次被分析為相同的數值。使用此說明符格式化數值時,首先使用常規格式對其進行測試:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的數值,則使用常規格式說明符對其進行格式化。但是,如果此值未被成功地分析為相同數值,則它這樣格式化:Double 使用 17 位精度,Single使用 9 位精度。
雖然此處可以存在精度說明符,但它將被忽略。使用此說明符時,往返過程優先于精度。
X 或 x
十六進制數
只有整型才支持此格式。數字轉換為十六進制數字的字符串。格式說明符的大小寫指示對大于 9 的十六進制數字使用大寫字符還是小寫字符。例如,使用“X”產生“ABCDEF”,使用“x”產生“abcdef”。
文章列表