C# 格式化字符串的实现代码

2019-12-30 14:43:22刘景俊

 

看下面的例子:


double i = 123456.42;
   Console.WriteLine();
   Console.WriteLine("{0:000000.00}", i); //123456.42
   Console.WriteLine("{0:00.00000000e+0}", i); //12.34564200e+4
   Console.WriteLine("{0:0,.}", i);   //123
   Console.WriteLine("{0:#0.000}", i);    // 123456.420
   Console.WriteLine("{0:#0.000;(#0.000)}", i);  // 123456.420
   Console.WriteLine("{0:#0.000;(#0.000);<zero>}", i); // 123456.420
   Console.WriteLine("{0:#%}", i);  // 12345642%

   i = -123456.42;
   Console.WriteLine();
   Console.WriteLine("{0:000000.00}", i); //-123456.42
   Console.WriteLine("{0:00.00000000e+0}", i); //-12.34564200e+4
   Console.WriteLine("{0:0,.}", i);   //-123
   Console.WriteLine("{0:#0.000}", i);    // -123456.420
   Console.WriteLine("{0:#0.000;(#0.000)}", i);  // (123456.420)
   Console.WriteLine("{0:#0;(#0);<zero>}", i); // (123456)
   Console.WriteLine("{0:#%}", i);    // -12345642%

   i = 0;
   Console.WriteLine();
   Console.WriteLine("{0:0,.}", i);   //0
   Console.WriteLine("{0:#0}", i);    // 0
   Console.WriteLine("{0:#0;(#0)}", i);  // 0
   Console.WriteLine("{0:#0;(#0);<zero>}", i); // <zero>
   Console.WriteLine("{0:#%}", i);    // %

4 数字字符串的解析

所有的基础类型都有ToString方法,它是从object类型中继承过来的。所有的数值类型都有Parse方法,它用字符串为参数,并且返回相等的数值。比如


public class NumParsingApp
{
 public static void Main(string[] args)
 {
  int i = int.Parse("12345");
  Console.WriteLine("i = {0}", i);

  int j = Int32.Parse("12345");
  Console.WriteLine("j = {0}", j);

  double d = Double.Parse("1.2345E+6");
  Console.WriteLine("d = {0:F}", d);

  string s = i.ToString();
  Console.WriteLine("s = {0}", s);
 }
}

输出如下

i = 12345
j = 12345
d = 1234500.00
s = 12345

在缺省状况下,某些非数字字符是可以存在的。比如开头和结尾的空白。逗号和小数点,加号和减号,因此,下面的Parse语句是一样的


string t = " -1,234,567.890 ";
//double g = double.Parse(t);  // 和下面的代码干同样的事情
double g = double.Parse(t, 
 NumberStyles.AllowLeadingSign | 
 NumberStyles.AllowDecimalPoint |
 NumberStyles.AllowThousands |
 NumberStyles.AllowLeadingWhite | 
 NumberStyles.AllowTrailingWhite);
Console.WriteLine("g = {0:F}", g);

输出都是这样

g = -1234567.89

注意到,如果你要使用NumberStyles,就要添加对System.Globalization的引用,然后就可以使用不同NumberStyles的组合或者其中的任意一种。如果你想兼容货币符号,就需要使用重载的Parse方法,它们采用了NumberFormatInfo对象作为一个参数,然后你可以设置NumberFormatInfo的CurrencySymbol属性来调用Parse方法,比如: