數學算法
经过测试发现Math.Round函数存在这个问题,采用的是“四舍六入五成双”的方式
譬如:Math.Round(1.5) = 2
Math.Round(2.5) = 2
而Sqlserver中采用的是传统的四舍五入的方式,为了保证前台程序与后台数据库的计算方法一致。
所以在Public中增加了一个类和两个静态方法
可以采用:MyMath.Round()方法来替代Math.Round()的方法
public static decimal Round(decimal number)
{
return EMSMath.Round(number,0) ;
}
public static decimal Round(decimal number, int dec)
{
string numStr = number.ToString() ;
if(numStr == "0") return (decimal)0.0 ;
int decIndex = numStr.IndexOf(".",0) ;
if(numStr.Length <= decIndex + dec + 1)
return number ;
string decStr = numStr.Substring(decIndex + dec + 1) ;
decStr = decStr.Replace("0","") ;
if(decStr == "5")
{
int lastNum ;
if(dec == 0)
lastNum = int.Parse(numStr.Substring(decIndex - 1,1)) ;
else
lastNum = int.Parse(numStr.Substring(decIndex + dec,1)) ;
if( lastNum % 2 == 0)
{
decimal addNumer = (decimal)1.0;
for(int i = 0; i < dec ; i ++)
{
addNumer = addNumer * (decimal)0.1 ;
}
return Math.Round(number,dec) + addNumer ;
}
else
return Math.Round(number,dec) ;
}
else
return Math.Round(number,dec) ;
}
========================== =================
Math.pow(double a, double b)
是求a的b次方的