先看代码 dt.Columns.Add("a", typeof(double));
            dt.Columns.Add("b");
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = 11.234 * i * 10;
                dr[1] = i.ToString();
                dt.Rows.Add(dr);
            }
            this.dataGridView1.DataSource = dt.DefaultView;
结果DataGridView显示的数据有一个单元格是786.38000000000011
请问为什么会出现这样的?怎么解决?

解决方案 »

  1.   

    要不能损失进度,其实dt表的数据是准确的,就是DataGridView显示出现问题
      

  2.   

    在  GridView RowDataBound事件里写e.Row.Cells[0].Text=e.Row.Cells[0].Text.ToString("0.00").Trim();
      

  3.   

    .tostring()不是就转换成字符了吗?转了后会失精定这些吗?具体不知道了!
      

  4.   

    按照你的这个方法,有的结果是561.7,你给强制成了561.70
    假设有的几个结果是567.712,你就给强制成了561.71
    我都说了不要损失精度了,对好是dt的数据是什么样的,DataGridView就是现实什么样的
      

  5.   


    我都说了不要损失精度了,对好是dt的数据是什么样的,DataGridView就是现实什么样的这是不可能实现的,当你有数据位数过多时就会显示科学计数法的。还是格式化吧。
      

  6.   

    LZ的意思是不是要数据要精准,但是在页面上显示出来的不能太多。   如果这样的话你可以试试用Substring(0,3)来截取一下。这样数据又精确了。显示问题也解决了。
      

  7.   

     dr[1] = i.ToString(“F2”);
      

  8.   

    dataGridView1.Columns["a"].DefaultCellStyle.Format("F2");
    没有测试。
      

  9.   

    其实我最想知道的是为什本来是786.38的数被DataGridView显示成了786.38000000000011 
    因为我的项目中出现了这个问题,我想知道产生的原因,好去解决。
      

  10.   

    dataGridView1.Columns["a"].DefaultCellStyle.Format = "0.00"或者
    dataGridView1.Columns["a"].DefaultCellStyle.Format = "N2"
      

  11.   

    不需要大家的解决办法,希望大家能告诉我为什么786.38的数被DataGridView显示成了786.38000000000011 ,谢谢!
      

  12.   

    难道大家在做.net winform开发时都没遇到这个问题吗?
      

  13.   

    难道DataGridView在现实double数786.38时进行了浮点运算,运算结果是:786.38000000000011 ?
    还是为什么10行数据中只有第8行也就是i=7哪一行的数据显示不一致呢?
    只是想弄明白为什么会显示成这样?
    是BUG吗?
      

  14.   

    遇到过,改用float就没这个问题了
      

  15.   


    楼主还是搜搜double在内存中的表示吧。
    我们用的十进制在转化成二进制的时候是有精度损失的(因为0.38乘以2是不尽的死循环),而再转回来很明显就不是原来的值了。我觉得可以进行精度的确认,也就是说精确到第几位就行了.  double.ToString("F6")统一精确到6位。
      

  16.   

    #region 保留两2小数
            /// <summary>
            /// 保留2位小数
            /// </summary>
            /// <param name="StrNumber"></param>
            /// <returns></returns>
            public string DecPoint2(double StrNumber)
            {
                string StrDec;
                StrDec = StrNumber.ToString("f2");
                return StrDec;
            }
            #endregion
      

  17.   


    dr[0] = 11.234 * i * 10;
    你再改成
    dr[0] = 11.234 * i * 100;
    试试看
      

  18.   

    看来没有人知道DataGridView这么现实的原因,失望啊!
      

  19.   

    呵呵,来晚了,我来告诉你吧,你可以从DataGridView编辑列里面选中尼的那一列,然后选择DefaultCellStyle项打开,然后在行为里面有个Format,点击打开选择你要设置的格式即可。如果里面没有你要的格式,可以自定义格式,就不会出错了。
      

  20.   

    dr[0] =Math.round(11.234 * i * 10,2);
      

  21.   

    typeof(double));类型 改 精确类型
      

  22.   

    请问你们给double类型的单元格赋值一个String类型的是如何做到的!
    Row.Cells[0].Text我的cells[0]怎么没有Text属性