怎样在DataColumn.Expression表达式中使用四舍五入,或者只舍不入,或者只入不舍的函数
我要在datatable中定义一些公式列,公式中需要使用到四舍五入,或者只舍不入,或者只入不舍的函数,但是DataColumn.Expression不支持此类函数,请告人指点有没有什么方法能实现此需求。 --------------------编程问答-------------------- up --------------------编程问答-------------------- 关注中... --------------------编程问答-------------------- 自己解决了(精度为小数点后面两位),方法如下://四舍五入
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的问题。 --------------------编程问答--------------------
我觉得需要修正下:
//四舍五入
adt.Columns[ "Salary3 "].Expression = "Convert(Salary1 * 100 + 0.1, 'System.Int32 ') / 100 ";
--------------------编程问答-------------------- 按理解:Convert.ToInt32(浮点数)应该是应用了银行家算法进行“四合五入”,所以才加上 0.000000001, 0.000000001不能影响精度,只是作为提升数据类型用,要调整的是将数据变回来的情况:
Convert((iUnitCost*iQuantity)*100+0.00000001,'System.Int32')/100.0
因为 整数99/整数100 的结果是整数零。 --------------------编程问答-------------------- 补充下:银行家算法的“四舍五入”是,当目标数是奇行偶不进,即 4.5 转换为 4,而 5.5 转换为 6。
Convert.ToInt32(浮点数)的是 舍入为最接近的 32 位有符号整数的 value。如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6,也即。
加上0.00000001后,则不再是两个整数的中间数,满足了传统意义上的四舍五入。
补充:.NET技术 , C#