//--------------忙忙碌碌,從代碼的搬運工做起--------------//
有時候,我們在使用TextBox顯示參數數值時,如果直接轉換成字符串輸出,往往顯示的格式不盡如意,為了能夠轉換成我們想要的格式輸出,我們就需要用到格式化字符串。
如果想要控制數字轉字符串的顯示精度,可以參考如下:
double i = 123456.78901;
//設置精度為3
string.Format("{0:F3}", i);
string.Format(("{0:0.000}", i);
string.Format(("{0:#.###}", i);//當實際數字小數點后數字小於3個時,只顯示實際個數,不會補零
更多細節如下:
格式化字符串:
格式化的格式
string.Format("{ N [, M ][: formatString ]}", arg0, ... argN),在這個格式中:
- N是從0開始的整數,表示arg0-argN的索引
- M是可選的整數,表示格式化后的參數所占的寬度,如果M是負數,那么格式化后的值就是左對齊的,如果M是正數,那么格式化后的值是右對齊的
- formatString是可選的參數,表示格式代碼
- argN表示要格式化的值,和N是對應的。
最簡單的格式即string.Format("{0}",arg0)。
格式化標志符
| 字母 | 含義 |
| C或c | Currency 貨幣格式 |
| D或d | Decimal 十進制格式 |
| E或e | Exponent 指數格式 |
| F或f | Fixed point 固定精度格式 |
| G或g | General 常用格式 |
| N或n | 用逗號分割千位的數字,比如1234將會被變成1,234 |
| P或p | Percentage 百分符號格式 |
| R或r | Round-trip 圓整(只用於浮點數)保證一個數字被轉化成字符串以后可以再被轉回成同樣的數字 |
| X或x | Hex 16進制格式 |
類似string.Format("{0:C2}",arg0),其中,C是格式化標志符,2是精度,精度默認是2,因此也可寫成string.Format("{0:C}",arg0)。
示例代碼:
double i = 123456.78; Console.WriteLine("{0:C}", i);//¥123,456.78,貨幣(如需轉換美元,詳見下方) Console.WriteLine("{0:C3}", i);//¥123,456.780,精度3,不足補零 Console.WriteLine("{0:D}", 0x123456);//1193046,十進制整數,可用於進制轉換(使用小數會報錯) Console.WriteLine("{0:D10}", 0x123456);//0001193046,個數10,不足補零 Console.WriteLine("{0:E}", i);//1.234568E+005,科學技術法 Console.WriteLine("{0:E10}", i);//1.2345678000E+005 Console.WriteLine("{0:F}", i);//123456.78,固定精度,默認精度為2 Console.WriteLine("{0:F5}", i);//123456.78000 Console.WriteLine("{0:G}", i);//123456.78,常用格式,G后面帶數字是指保留數字個數,默認全部顯示 Console.WriteLine("{0:G5}", i);//1.2346E+05,設置個數小於實際個數時以科學計數法顯示,保留5個數字 Console.WriteLine("{0:G6}", i);//123457,保留6個數字 Console.WriteLine("{0:G10}", i);//123456.78,設置個數大於實際個數時,保持實際個數,保留8個數字 Console.WriteLine("{0:N}", i);//123,456.78,千位分割 Console.WriteLine("{0:N10}", i);//123,456.7800000000 Console.WriteLine("{0:P}", i);//12,345,678.00%,百分數,默認精度為2 Console.WriteLine("{0:P10}", i);//12,345,678.0000000000% Console.WriteLine("{0:X}", 123456);//1E240,十六進制整數,可用於進制轉換(使用小數會報錯) Console.WriteLine("{0:X10}", 123456);//000001E240,個數10,不足補零 Console.WriteLine("{0:R}", i);//123456.78,保留17位有效數字 Console.WriteLine("{0:R}", 0.00001234567890123456789012345);//1.2345678901234568E-05 Console.WriteLine("{0:R}", 0.0001234567890123456789012345);//0.00012345678901234567 Console.WriteLine("{0:R}", 0.1234567890123456789012345);//0.12345678901234568 Console.WriteLine("{0:R}", 1.234567890123456789012345);//1.2345678901234567 Console.WriteLine("{0:R}", 3.4567890123456789012345);//3.4567890123456788 //補充 Console.WriteLine(i.ToString("C", new System.Globalization.CultureInfo("en-US")));//$123,456.78,美元
圖形化格式字符串
| 符號 | 名稱 | 含義 |
| 0 | 0占位符 | 用0填充不足的位數 |
| # | 數字占位符 | 用#代替實際的位數 |
| . | 十進制小數點 | |
| , | 千位分隔符 | 用逗號進行千位分割,比如把1000分割成1,000 |
| % | 百分符號 | 顯示一個百分標識 |
| E+0 E-0 e+0 e-0 |
指數符號 | 用指數符號格式化輸出 |
| \ | 專一字符 | 用於傳統格式的格式化序列,比如"\n"(新行) |
| 'ABC' "ABC" |
常量字符串 | 顯示單引號或者雙引號里面的字符串 |
| ; | 區域分隔符 | 如果數字會被格式化成整數,負數,或者0,用;來進行分隔 |
| ,. | 縮放符號 | 數字除以1000 |
示例代碼:
double i = 123456.78; Console.WriteLine("{0:0.000}", i);//123456.780,0占位符,不足補零 Console.WriteLine("{0:0000000.00}", i);//0123456.78 Console.WriteLine("{0:#.#}", i);//123456.8,#占位符 Console.WriteLine("{0:#.####}", i);//123456.78 Console.WriteLine("{0:0,0}", i);//123,457,千位分隔 Console.WriteLine("{0:0,0.0}", i);//123,456.8 Console.WriteLine("{0:,0.00}", i);//123456.78 Console.WriteLine("{0:#%}", i);//12345678%,百分比 Console.WriteLine("{0:#.#E+0}", i);//1.2E+5,科學計數法 Console.WriteLine("{0:#.#E-0}", i);//1.2E5 Console.WriteLine("{0:#.#E+0}", 0.000000123456789);//1.2E-7 Console.WriteLine("{0:#.#E-0}", 0.000000123456789);//1.2E-7 Console.WriteLine("{0:#.# 'Abc'}", i);//123456.8 Abc,添加字符串 Console.WriteLine("{0:#.#;#.##;<hello>}", i);//123456.8,分號區分正數、負數及零的不同格式化代碼 Console.WriteLine("{0:#.#;#.##;<hello>}", -i);//123456.78 Console.WriteLine("{0:#.#;#.##;<hello>}", 0);//<hello> Console.WriteLine("{0:0,.}", i);//123,縮放1000 Console.WriteLine("{0:0,.000}", i);//123.457
參考flyingbread的《使用C#格式化字符串 ~》,詳情請移步:https://www.cnblogs.com/zyh-nhy/archive/2007/10/11/921240.html
//--------------勤勤懇懇,做一只搬運知識的螞蟻--------------//
