DataColumn dc = new DataColumn();
        dc.ColumnName = "bfb";
        dc.Expression ="(sl/"+b+")";              
        dt.Columns.Add(dc);   
sl,b都是int型的,但添加这一列后是  0.1123214123123
现在想让它显示  11.23%咋整啊????

解决方案 »

  1.   

    "(sl/"+b+")";  会有好多小数点,现在只想保存两位啊.. 怎么写
      

  2.   

    建议值保存的时候就用小数就可以了。
    显示的时候用Format P2
      

  3.   

    你计算出来的是什么类型
    int或者double或者string ??
    double.parse("10.222222").ToString("0.00");
    结果10.22
      

  4.   

    int i = 123456;
    Console.WriteLine("{0:P}", i); // 12,345,600.00 %
      

  5.   

    dc.Expression = double.Parse("(sl/" + b + ")").ToString("0.00") ;        输入字符串的格式不正确。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 输入字符串的格式不正确。
      

  6.   

     Double.Parse("111.11111111").ToString("f2");
     要留几个小数点 只要在Tostring("")写f几  就行啦 
      

  7.   


    public class FormatSpecApp
    {
        public static void Main(string[] args)
        {
            int i = 123456;
            Console.WriteLine("{0:C}", i); // ¥123,456.00
            Console.WriteLine("{0:D}", i); // 123456
            Console.WriteLine("{0:E}", i); // 1.234560E+005
            Console.WriteLine("{0:F}", i); // 123456.00
            Console.WriteLine("{0:G}", i); // 123456
            Console.WriteLine("{0:N}", i); // 123,456.00
            Console.WriteLine("{0:P}", i); // 12,345,600.00 %
            Console.WriteLine("{0:X}", i); // 1E240
        }
    }精度控制标识控制了有效数字的个数或者十进制数小数的位数。Console.WriteLine("{0:C5}", i); // ¥123,456.00
    Console.WriteLine("{0:D5}", i); // 123456
    Console.WriteLine("{0:E5}", i); // 1.23456E+005
    Console.WriteLine("{0:F5}", i); // 123456.00000
    Console.WriteLine("{0:G5}", i); // 1.23456E5
    Console.WriteLine("{0:N5}", i); // 123,456.00000
    Console.WriteLine("{0:P5}", i); // 12,345,600.00000 %
    Console.WriteLine("{0:X5}", i); // 1E240
      

  8.   

    你干脆再循环一遍把这列的值改一遍好了dt.Rows[i]["bfb"] = (Convert.ToDouble(dt.Rows[i]["bfb"])*100).ToString("0.00")+"%";不想了..
      

  9.   

    {0:N2}小数点保留2位有效数字;
    {0:N2}%   小数点保留2位有效数字加百分号;
    double i = 0.1123214123123 ; 
    Console.WriteLine("{0:N2}%", i);
      

  10.   

    String.Format("{0:F2}",56789);  的结果是56789.00以后怎么弄就看你自己了           
      

  11.   

    看错了....C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的Math.Round 方法默认的也是 Banker 舍入法在 .NET 2.0 中 Math.Round 方法有几个重载方法
    Math.Round(Decimal, MidpointRounding)
    Math.Round(Double, MidpointRounding)
    Math.Round(Decimal, Int32, MidpointRounding)
    Math.Round(Double, Int32, MidpointRounding)将小数值舍入到指定精度。MidpointRounding 参数,指定当一个值正好处于另两个数中间时如何舍入这个值该参数是个 MidpointRounding 枚举此枚举有两个成员,MSDN 中的说明是:
    AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
    ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。注 意!这里关于 MidpointRounding.AwayFromZero 的说明是错误的!实际舍入为两个值中绝对值较大的值。不过 MSDN 中的 例子是正确的,英文描述原文是 it is rounded toward the nearest number that is away from zero.所以,要实现四舍五入函数,对于正数,可以加一个 MidpointRounding.AwayFromZero 参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:Math.Round(3.45, 2, MidpointRounding.AwayFromZero)不过对于负数上面的方法就又不对了因此需要自己写个函数来处理
    第一个函数:
    double Round(double value, int decimals)
    {
    if (value < 0)
    {
    return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);
    }
    else
    {
    return Math.Round(value, decimals, MidpointRounding.AwayFromZero);
    }
    } 第二个函数:
    double Round(double d, int i)
    {
    if(d >=0)
    {
    d += 5 * Math.Pow(10, -(i + 1));
    }
    else
    {
    d += -5 * Math.Pow(10, -(i + 1));
    }
    string str = d.ToString();
    string[] strs = str.Split('.');
    int idot = str.IndexOf('.');
    string prestr = strs[0];
    string poststr = strs[1];
    if(poststr.Length > i)
    {
    poststr = str.Substring(idot + 1, i);
    }
    string strd = prestr + "." + poststr;
    d = Double.Parse(strd);
    return d;
    }参数:d表示要四舍五入的数;i表示要保留的小数点后为数。其中第二种方法是正负数都四舍五入,第一种方法是正数四舍五入,负数是五舍六入。备注:个人认为第一种方法适合处理货币计算,而第二种方法适合数据统计的显示。
      

  12.   


    "(sl/" + b + ")"这里有问题
      

  13.   

     foreach (DataRow dr in dt.Rows)
    {
             dr[2] = string.Format("{0:N2}", dr[2]);
    }
      

  14.   

    Math.Round(a,b)很强大,但是,a的类型却受到限制……
      

  15.   

    我借鉴楼上的方法,直接将用的a.tostring("0.00")实现了取小数后的两位小数。学习了……谢谢楼主及各位了