zoukankan      html  css  js  c++  java
  • C# 格式化输出

        今天刚学C#,写下我的第一个程序:

    class Program{
       public static void Main(String[] args){
          Console.WriteLine(10.0);
       }
    }

        作为一名java程序员,C#的写法是有点差异,常用的System.out.println()被替换成:Console.WriteLine(),而且C#的规范要求方法的首字母大写,但在java中这是类的命名规则。
         这些都是小问题,很快就习惯了,但我一运行这个代码,就发现我的输出变成了:10!

         原来,在C#这里,10.0会当成10来处理,如果我们想要正确的输出10.0,就要利用格式化输出,像是下面这样:

    Console.WriteLine("{0:N1}", 10.0);

         我们还可以这样写(这样麻烦了点):

    Console.WriteLine(String.Format("{0:N1}", 10.0));

        甚至我们还可以这样写;

    double d = 10;
    Console.WriteLine(d.ToString("N2");

        前面两种写法的第一个参数"{0:N1}"表示后面的第一个参数,就是10.0,取小数后一位,如果想取两位,可以将1改为2。后面一种说明,在C#中,double本身就是一种对象类型,因为它拥有方法。事实上,在C#中,所有的类型,值类型和引用类型继承自System.Object这个基类(看到Object,我这个java人可是亲切得很,但也被C#的这种特点吓到了~~才怪,javascript已经让我对这种情况没有什么感觉了---函数都是对象!)。

         当然,它可以处理更多的参数,像是这样:

    Console.WriteLine("I love {0}, you love {1}", "you", "me");

         而且我们还能以科学计数法的格式输出:

    Console.WriteLine("{0:E2}", 100);

        输出结果就是:1.00E+002.

        格式化输出还有更加神奇的地方:它允许一个格式项有多种格式选择:

    Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}",10);
    Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}", -10);
    Console.WriteLine("{0:#,###0.00;#,###0.000;#,###0.0000}", 0));

       神奇的是,这种格式具有选择性,第一种格式对应的是正数,第二种对应的是负数,第三种对应的是0,后面的参数会根据自身情况,选择相应的格式。

       格式化的内容很多,涉及到日期,货币等等,这些都是在需要用到的时候才会接触,所以,这里就不详谈。上面的问题其实很简单,因为我的数字是小数,在C#中,真的有一个专门的类型:decimal,它的位数是128位,范围为1.0 * 10^-28到7.9 * 10^28。我在使用的时候应该是这样:

       Console.WriteLine(10.0M);

       M表示是decimal类型,否则,就会默认转化为double。

       例子虽短,但反映出来的东西却不少,像是:string和String,应该用哪一个?

        我试过,两者都行,C#不是对大小写敏感吗?事实上就是,CLR(学C#的同学一定知道这东西)中是String类型,但在C#中,是string关键字。C#编译器在编译的时候,会进行这样的行为:

        using string = System.String这样的映射操作。

        既然这样,我就用回我以前习惯的String好了,这也是CLR via C#所建议的,但是其他的映射,像是:

        using int = System.Int32;

       using short = System.Int16;

       ...

       为了可读性,我还是使用int,short比较好,就算那样会提高点效率,但可读性也很重要,但如果是调用方法,还是使用Int32比较好说明这是在调用方法。这里倒想要补充一点:System.Single这货一开始让我摸不着头脑,后来才想起来是float!因为float是单精度,所以使用Single表示(对应System.Double的双精度)。稍微吐糟这点,float这个名字让很多人都忘记它是单精度的事实,因为浮点数这样的名称只会认为是小数。

       格式化输出还有一个问题我一直搞不明白:N和F应该用哪一个?

        使用N,会有千分符,像是10000,会变成这样:10,000,但有些结果看上去似乎是一样的,像是10.235,使用N2和F2,是一样的,就连尾数同样是四舍五入。看了资料,说N是数值,F是固定点,还是不明白,望请大神指教。

  • 相关阅读:
    在matlab中出现警告 Function call XX invokes inexact match
    VC2008调用matlab生成的dll和lib
    关于mwArray 的一些资料(一)
    关于C#中的3个timer类(申明是转贴的哦)
    C#教程 PDF
    我也做他个vote machine
    如何用UltraEdit编译C#源程序(再次申明这也是转贴的哦!)
    C#使用技巧调用DLL(还是转贴哦!)
    线程池
    Java web开发中如何自动生成文章html页面
  • 原文地址:https://www.cnblogs.com/wenjiang/p/2953299.html
Copyright © 2011-2022 走看看