一个简单的数字处理
最近做项目遇到一个数算法问题,其实也不是很难,但就是做个笔记吧,记录一下。
需求: 用户填写一个数,填写该数递增的数量,自动生成递增后的所有值,用户填写最小值最多保留俩位小数0.01,最大递增值是10000。递增值的取值范围就是这样了。
取值时如果末尾数都是0,那么每次递增就取前面的值的位数,如果尾数不为0,那么直接取到该数值当前的位数值,举个例吧,本人语言表达能力不是很好
例如:0.01,那么该数生成的递增值就为0.01
0.1 ,那么该数生成的递增值就为0.1
1.00 ,那么该数生成的递增值就为1
10.00 ,那么该数生成的递增值就为10
100.00 ,那么该数生成的递增值就为100
1000.00,那么该数生成的递增值就为1000
10000.00,那么该数生成的递增值就为10000
1241 , 那么该随生成的递增值就为1,
1241.15,那么该数生成的递增值就为0.01
1241.10,那么该数生成的递增值就为0.1
1240 ,那么该数生成的递增值就为10
这样能看明白了吧,就取递增值的时候从最后一位往前找,直到找到不为0的那位数为止。
下面说下思路:
首先先判断输入的数有没有小数点,如果有小数点则查看小数点后面的数是不是0,不为0,则说明每次递增的值肯定就是为小数了,直接处理小数部分即可。
如果输入的小数点后面都是0,那么就处理整数部分。
直接上代码了,很简单,估计都能看明白
class Program { static void Main(string[] args) { while (true) { Console.WriteLine("输入一个数"); string v = Console.ReadLine(); //每次递增的数 string unit = ""; char[] list = v.ToString().ToArray(); // 标记最小值是否已经获取,该标记决定其他值用“0”或“.”补齐。 bool compare = false; for (int i = list.Length; i > 0; i--) { string sign = list[i - 1].ToString(); if (sign != ".") { if (sign != "0" && !compare) { sign = "1"; compare = true; } else { sign = "0"; } } unit = sign + unit; } Console.WriteLine("随机数每次递增: " + Convert.ToDouble(unit)); Console.WriteLine(">>"); } } }
本人水平有限,也由于着急弄,就没想过过多的处理方法,有不对的地方请各位大神多多指教