PropertyInfo[] info = this.domain_obj.GetType().GetProperties();
            for (int i = 0; i < info.Length; i++)
            {
                if (info[i].Name=="TDMJ")
                {
                    if (info[i].GetValue(domain_obj, null) != null)
                    {
                        object obj1 = info[i].GetValue(domain_obj, null); //得到obj1为5.65423M
                        object obj2 = 5.65423M;                        if (obj1.Equals(obj2)) // true
                        {                        }
                        string d1 = obj1.ToString(); //得到值为  5.654230
                        string d2 = obj2.ToString();//得到值为   5.65432
                        //为什么d1后面会多一个0;
                    }
                }
            }
说明:obj1是获取的系统某个类里面的公共属性的值 属性名字是TDMJ  数据类型是decimal
      obj2是自己定义的 

解决方案 »

  1.   

    自己顶一下。。我就是想知道 把obj1转换为string的时候为什么后面多了一个0。
      

  2.   

    decimal类型是带小数位的,你给了多少小数位,就有多长,你为啥不自己测试下这个赋值:
    object obj2 = 5.654230M;
    肯定会把后面的0给输出。
      

  3.   

    我调试的时候 obj1 和obj2 是一样的 都是5.65423M
      

  4.   

    因为 decimal 是固定小数位的,
    实际应该类似于 SqlServer 里的 decimal,
    如 decimal(10,3) ,为3位小数,而c#里定义时不需要指定小数位,而是根据内容自动调整小数位,
    但它存储格式是固定小数位的,可以根据运算或赋值自动调整位数,
      

  5.   


            public decimal d1 { get; set; }        static void Main(string[] args)
            {
                Program p = new Program();
                p.d1 = 5.65423M;            PropertyInfo pi = p.GetType().GetProperty("d1");
                object obj1 = pi.GetValue(p, null);
                object obj2 = 5.65423M;            Console.WriteLine(obj1.ToString() + "---" + obj2.ToString());//输出:5.65423M---5.65423M
            }
    我模拟了一下,没发现这个情况啊
    不知何故。。
      

  6.   

    我自己新建一个工程测试也没有问题,后面不会多一个0。 我把decimal改为double 就可以了
      

  7.   

    来找我吧,我在.NET技术方面已经做了7、8年了,对于.NET技术的相关问题有很多经验,你可以再论坛私密我,最好是去问问堂找我,我在那里注册了一个在线专家,专门处理这类问题,希望可以帮助到你~!