zoukankan      html  css  js  c++  java
  • decimal的三种赋值方式

     

    今天风痕在群里问了个问题:给如下这三种定义decimal类型的变量赋值有什么不同?

    using System; 

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Decimal
    {
        class Program
        {
            static void Main(string[] args)
            {
                decimal dRebate1 = new decimal(1);
                decimal dRebate2 = Convert.ToDecimal(1);
                decimal dRebate3 = 1M;

                Console.WriteLine("dRebate1:{0}\ndRebate2:{1}\ndRebate3:{2}"
                     dRebate1.ToString(), dRebate2.ToString(), dRebate3.ToString());
                Console.ReadLine();
            }
        }
    }

    我感觉没有什么大的区别,仅仅是初始化值的来源方式不同而已,就好比吃饭可以用筷子或者勺子一样。现在就简单说说。 

    1.dRebate1 新实例初始化为指定的 32 位有符号整数值,因为C#编辑器知道它是值类型,所以在线程栈上分配这个整数值的实例,装的数值是1,其作用是初始化一个值。右键转到定义会看到程序集 mscorlib.dll中的元数据,发现在new decimal(1)中的1不能是string等字符类型,只能是如图下面的一些类型:

     

    2. dRebate2 这个是将指定的 32 位(也可以是16位)带符号整数的值转换为等效的十进制数,即decimal基本类型,它在这里就是将其它的基本类型转化成decimal类型,当然,可以是绝大部分的基本类型都可以通过Convert进行转换,可以点这里查看转换类型种类。

    3.dRebate3 ,这个就更加的明显了,在C#中,M或者m表示的就是这个值是decimal的基本类型,只要是这样定义的,就告诉C#编辑器,这个值是decimal类型的,以后就当这个类型的来用。当然,如果你写个string类型的"123"后面跟个M,那肯定是会报错的,F5不通过,因为编辑器不认识这是什么东东,即使"123"的老爸是李刚也不行。跟decimal基本类型M写法类似的有很多,float用F或者f,double用D或者d等等。

    最后,我用VS2010自带的工具 IL反汇编工具看了下有什么不同,其实因为本来值得来源展示方式不同,那生成的IL肯定也不同了。

     

    里面的IL关键字每种定义可以参看:《你必须知道的.NET》中的第三章,《CLR via C#》的第五章,这里就不多说 了。

    总结:我们定义类型的时候,要看具体场合,不要纠结谁好谁差,用对了场景,符合了习惯,那就是100% 的好。

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/yinhe/p/2639125.html
Copyright © 2011-2022 走看看