/// <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; }