/// <summary>
/// 修约
/// </summary>
/// <param name="d">平均值</param>
/// <param name="dj">等级(样例 1级:1,2级:2,0.5级:0.5) </param>
/// <returns></returns>
public string XiuYue(double d, double dj)
{//原创来自 http://www.luofenming.com/show.aspx?id=ART2022011100001
string reslutStr = "";
string f = "f2";
if (dj == 1 || dj == 2)//等级为1或2时 保留一位小数 其它保留2位
{
f = "f1";
}
double result = d / dj;//平均误差 / 等级
int temp = GetNumberOfDecimalPlaces(result);//获取小数位数
if (temp == 2 && result.ToString().Substring(result.ToString().Length - 1) == "5")//判断 如果小数位=2,并且小数据尾数据=5
{
temp = (int)(result * 10);//获取小数点第一位 奇数还是偶数据
if (temp % 2 == 0)//偶数
{
reslutStr = ((temp / 10.0) * dj).ToString(f);
}
else//奇数
{
reslutStr = ((temp + 1) / 10.0 * dj).ToString(f);
}
}
else//否则 四舍五入
{
//result*10 --> 四舍五入 -->除以 10 -->乘以 等级--> 保留几位小数(相当保留1位小数的四舍五入/ 等级 然后根据等级保留 几位小数据)
reslutStr = (Math.Round(result * 10, MidpointRounding.AwayFromZero) / 10 * dj).ToString(f);
}
return reslutStr;
}
/// <summary>
/// 获取小数位数
/// </summary>
/// <param name="decimalV">小数</param>
/// <returns></returns>
public int GetNumberOfDecimalPlaces(double decimalV)
{
string[] temp = decimalV.ToString().Split('.');
if (temp.Length == 2 && temp[1].Length > 0)
{
int index = temp[1].Length - 1;
while (temp[1][index] == '0' && index-- > 0) ;
return index + 1;
}
return 0;
}