本文共 1525 字,大约阅读时间需要 5 分钟。
//CorMax 数据最大值 //CorMin 数据最小值 //CorNumber 刻度个数 public void Standard(ref double CorMax, ref double CorMin, int CorNumber) { double tmpMax, tmpMin; double CorStep, tmpStep; int tmpNumber; double temp; int extraNumber; if (CorMax > CorMin) { //计算原始步长 CorStep = (CorMax - CorMin) / CorNumber; //计算步长的数量级 if (Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10))) == CorStep) { temp = Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10))); } else { temp = Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10)) + 1); } //将步长修正到(O,1)问 tmpStep = CorStep / temp; //选取规范步长 if (tmpStep >= 0 && tmpStep <= 0.1) { tmpStep = 0.1; } else if (tmpStep >= 0.100001 && tmpStep <= 0.2) { tmpStep = 0.2; } else if (tmpStep >= 0.200001 && tmpStep <= 0.25) { tmpStep = 0.25; } else if (tmpStep >= 0.25001 && tmpStep <= 0.5) { tmpStep = 0.5; } else { tmpStep = 1; } //规范步长按数量级还原 tmpStep = tmpStep * temp; //修正起点值 if ((int)(CorMin / tmpStep) != (CorMin / tmpStep)) { CorMin = (int)(CorMin / tmpStep) * tmpStep; } if ((int)(CorMax / tmpStep) != (CorMax / tmpStep)) { CorMax = (int)(CorMax / tmpStep + 1) * tmpStep; } //看最后修正是否必要,包括:刻度数、起点值、终点值 tmpNumber = Convert.ToInt32((CorMax - CorMin) / tmpStep); if (tmpNumber < CorNumber) { extraNumber = CorNumber - tmpNumber; if (extraNumber % 2 == 0) { CorMax = CorMax + tmpStep * (int)(extraNumber / 2); } else { CorMax = CorMax + tmpStep * (int)(extraNumber / 2 + 1); } CorMin = CorMin - tmpStep * (int)(extraNumber / 2); if (CorMin < 0) { CorMax = CorMax - CorMin; CorMin = 0; } } CorNumber = tmpNumber; } } 转载地址:http://fjrmb.baihongyu.com/