自己解决了(精度为小数点后面两位),方法如下:
            //四舍五入
            adt.Columns["Salary3"].Expression = "Convert(Salary1 * 100 + 0.000000001,'System.Int32') / 100";
            
            //只舍不入
            adt.Columns["Salary4"].Expression = "Convert((Salary1 - 0.005 + 0.000000001) * 100,'System.Int32') / 100";
            
            //只入不舍
            adt.Columns["Salary5"].Expression = "Convert((Salary1 + 0.005 - 0.000000001) * 100,'System.Int32') / 100";
注意:
这里面如果不加0.000000001则0.125被“四舍五入”成0.12,
0.1251会才会被“四舍五入”成0.13的问题。

解决方案 »

  1.   

    我觉得需要修正下:
    //四舍五入 
    adt.Columns[ "Salary3 "].Expression   =   "Convert(Salary1   *   100   +   0.1, 'System.Int32 ')   /   100 "; 
      

  2.   

    按理解:Convert.ToInt32(浮点数)应该是应用了银行家算法进行“四合五入”,所以才加上 0.000000001, 0.000000001不能影响精度,只是作为提升数据类型用,要调整的是将数据变回来的情况:
    Convert((iUnitCost*iQuantity)*100+0.00000001,'System.Int32')/100.0
    因为 整数99/整数100 的结果是整数零。
      

  3.   

    补充下:银行家算法的“四舍五入”是,当目标数是奇行偶不进,即 4.5 转换为 4,而 5.5 转换为 6。Convert.ToInt32(浮点数)的是 舍入为最接近的 32 位有符号整数的 value。如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6,也即。加上0.00000001后,则不再是两个整数的中间数,满足了传统意义上的四舍五入。