首页 > 技术文章 > 一个将数据均匀分段1,2,5的随写

luxishi 2018-06-12 15:57 原文

 1 private static List<int> GetXList(int value)
 2     {
 3         List<int> xList=new List<int>();
 4         //将数据粗略分为10-20段,在此区间内寻找余数最小的值
 5         float minResidueRatio=1.01f;//余数
 6         int goalElement=0;
 7         for(int i=10;i<=20;i++)
 8         {
 9             int element=value/i;
10             element=GetXSpace(element);
11             if(value%element==0)
12             {
13                 goalElement=element;
14                 break;
15             }
16             float residueRatio=(float)((value/element+1)*element-value)/(float)element;
17             if(residueRatio<minResidueRatio)
18             {
19                 minResidueRatio=residueRatio;
20                 goalElement=element;
21             }
22         }
23         int segNum=0;//分段数
24         if(value%goalElement==0)
25         segNum=value/goalElement;
26         else
27         segNum=value/goalElement+1;
28         for(int i=0;i<=segNum;i++)
29         {
30             xList.Add(i*goalElement);
31         }
32         return xList;
33         
34     }
35 
36     private static int GetXSpace(int value)
37     {
38         int Digit=GetNumDigit(value);
39         int num=(int)Math.Pow(10,Digit);
40         int []arr={1,2,5};
41         int goal=num;
42         for(int i=0;i<arr.Length;i++)
43         {
44             if(num*arr[i]<=value)
45             {
46                 goal=num*arr[i];
47             }
48             else
49             {
50                 break;
51             }
52             
53         }
54         return goal;
55     }
56 
57     private static int GetNumDigit(int num)
58     {
59         int temp=10; 
60         int count=0;
61         while(temp<num)
62         {
63             temp*=10;
64             count++;
65         }
66         return count;
67     }

 

推荐阅读