DataTable dt = new DataTable();
                       
dt.Columns.Add("大于200人数", System.Type.GetType("System.Int16"));
dt.Columns.Add("总人数", System.Type.GetType("System.Int16"));
dt.Columns.Add("比例", System.Type.GetType("System.String"));前面两列数据已经成功添加进去了
最后一列如果用 dt.Columns["比例"].Expression = "大于200人数/总人数";dataGridView1.DataSource = dt;  正常
--------------------------------------------------------------------------------------------------------但由于小数位数太多,希望用显示2位小数,如果用
dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString();
则仍然显示一长串小数,但程序能调通
--------------------------------------------------------------------------------------------------------
如果用dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString("0.00");
则调不通,提示错误:
1 与“string.ToString(System.IFormatProvider)”最匹配的重载方法具有一些无效参数
2        参数 1: 无法从“string”转换为“System.IFormatProvider”
望各位指点

解决方案 »

  1.   

    .Expression只是表达式而已,不是实际计算的公式,你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式
      

  2.   

    先把你的值用 double类型存起来..然后在这样调用 double.tostring("0.00");
      

  3.   

    把你的返回值转换成数字然后ToString("F2");
      

  4.   

    分两步,先设置位数,再tostring()
      

  5.   

    .Expression只是表达式而已,实际计算的位置是在framework内部完成的,你所做的只是把表达式传给datatable的计算引擎,所以这里没法设置格式。
    你要处理的是界面显示的问题, 如果使用datagridview之类控件,可以到控件里设置格式 即在datagridviewColumn中设置cellstyle->format选数字,定位数
      

  6.   

    正确。或者转成数字设置格式,再转成strign.
      

  7.   


    请问具体该怎么弄,我对datagridview不太了解,用的方法是最后绑定datatable
    dataGridView1.DataSource = dt;
    而且其他列有string格式的,如何单独设置一列的格式,还望具体教我一下
      

  8.   

    我是LZ,很多人说先转成Double,我试过了dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString();
    能通,但无效
    -----------------------------------------------------------------------
    dt.Columns["比例"].Expression = ("大于200人数/总人数").ToString("0.00");
    不通
    1 与“string.ToString(System.IFormatProvider)”最匹配的重载方法具有一些无效参数 
    2 参数 1: 无法从“string”转换为“System.IFormatProvider”
    -----------------------------------------------------------------------
    dt.Columns["比例"].Expression =(Double.Parse("大于200人数/总人数")).ToString();
    dt.Columns["比例"].Expression =(Convert.ToDouble("大于200人数/总人数")).ToString();
    不提示错误,但调试时出错
    “System.FormatException”类型的未经处理的异常出现在 mscorlib.dll 中。
    其他信息: 输入字符串的格式不正确。是否有其他转换方式?请教一下
      

  9.   


    在设计界面找到了DefaultCellStyle属性,点开后设置其Format属性为N2
    结果前两列人数变成了2位小数了,如3.00
    最后一列还是长小数如果只针对一列设置?另外此法似乎无效
      

  10.   

    double 值 = 大于200人数/总人数;
    值.ToString("F2");
      

  11.   

    datagridview.autogenerateColumns=false;手工建3个列,每列手工设绑定,如
    datagridview.columns["比例"].datapropertyname="比例".
    在column上设属性,
      

  12.   

    解决了,诸位的方法似乎都不管用dt.Columns["比例"].Expression 这样赋值后,似乎此列类型都不好转换了……最后用的方法是
    for (i = 0; i < dt.Rows.Count; i++)
                {
                    dt.Rows[i][3] = (Double.Parse(dt.Rows[i][1].ToString()) / Double.Parse(dt.Rows[i][2].ToString())).ToString("P");
                }
      

  13.   

    你要把datatable的列定义调一下:
    dt.Columns.Add("比例", System.Type.GetType("System.String"));改为:
    dt.Columns.Add("比例", System.Type.GetType("System.int16"));
      

  14.   

    似乎没用,我昨天发帖询问之前就已经试了,并且我觉得用string应该更好,毕竟最后需要.tostring("P")方法