C#控制台基础 无符号十六进制小数转换为十进制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#控制台基础 无符号十六进制小数转换为十进制相关的知识,希望对你有一定的参考价值。
镇场诗:
———大梦谁觉,水月中建博客。百千磨难,才知世事无常。
———今持佛语,技术无量愿学。愿尽所学,铸一良心博客。
——————————————————————————————————————————
1 code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication15 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //这个字典是为了遇到16进制到10进制转换时遇到字母准备的 14 //如果是字母,那么运行字典转换成十进制数 15 Dictionary<char, int> tableOf16_10 = new Dictionary<char, int>(); 16 tableOf16_10.Add(‘a‘, 10); 17 tableOf16_10.Add(‘b‘, 11); 18 tableOf16_10.Add(‘c‘, 12); 19 tableOf16_10.Add(‘d‘, 13); 20 tableOf16_10.Add(‘e‘, 14); 21 tableOf16_10.Add(‘f‘, 15); 22 23 24 25 Console.WriteLine("your turn:"); 26 string value = Console.ReadLine(); 27 28 //分离字符串,以小数点为界限 29 string[] values = value.Split(new char[] { ‘.‘ }, StringSplitOptions.RemoveEmptyEntries); 30 31 //存储小数部分的字符串 32 string decimalsPart = values[1]; 33 //存储整数部分的字符串 34 string integerPart = values[0]; 35 36 //小数部分出来的10进制数字一定是double类型的 37 double sumOfDecimalsPart = 0.0; 38 39 char temp; 40 for (int i = 0; i < decimalsPart.Length; i++) 41 { 42 //decimalsPart[i]是char类型,所以要加一个tostring 43 //在算法设计的初级阶段,不要写出一个有多个变量的长式子, 44 //要把式子的每个变量都用单独命名,然后调试的时候可以检测到是哪一个变量出了问题 45 //int itemp = Convert.ToInt32(decimalsPart[i].ToString()); 46 47 temp = decimalsPart[i]; 48 49 //判断decimalsPart[i]是否是字母 50 if (char.IsLetter(temp)) 51 { 52 if(char.IsUpper(temp)) 53 { 54 temp =Convert.ToChar(Convert.ToInt32(temp)+32); 55 56 } 57 //如果是字母,就用字典来转换 58 sumOfDecimalsPart += Convert.ToDouble(tableOf16_10[temp] * Math.Pow(16, -(i + 1))); 59 } 60 else 61 { 62 //如果不是字母正常对待 63 sumOfDecimalsPart += Convert.ToDouble(Convert.ToInt32(decimalsPart[i].ToString()) * Math.Pow(16, -(i + 1))); 64 } 65 66 } 67 68 69 int sumOfintegerPart = 0; 70 for (int i = 0; i < integerPart.Length; i++) 71 { 72 //decimalsPart[i]是char类型,所以要加一个tostring 73 //在算法设计的初级阶段,不要写出一个有多个变量的长式子, 74 //要把式子的每个变量都用单独命名,然后调试的时候可以检测到是哪一个变量出了问题 75 //int itemp = Convert.ToInt32(decimalsPart[i].ToString()); 76 temp = integerPart[i]; 77 //判断decimalsPart[i]是否是字母 78 if (char.IsLetter(temp)) 79 { 80 if (char.IsUpper(temp)) 81 { 82 temp = Convert.ToChar(Convert.ToInt32(temp) + 32); 83 84 } 85 //如果是字母,先转换成小写字母,再用字典来转换 86 sumOfintegerPart += Convert.ToInt32(tableOf16_10[char.ToLower(temp)] * Math.Pow(16, i)); 87 } 88 else 89 { 90 //如果不是字母正常对待 91 sumOfintegerPart += Convert.ToInt32(Convert.ToInt32(integerPart[i].ToString()) * Math.Pow(16,i)); 92 } 93 } 94 95 96 Console.Write("decimalsPart:"); 97 Console.WriteLine(decimalsPart); 98 99 Console.Write("sumOfDecimalsPart:"); 100 Console.WriteLine(sumOfDecimalsPart); 101 102 Console.Write("integerPart:"); 103 Console.WriteLine(integerPart); 104 105 Console.Write("sumOfintegerPart:"); 106 Console.WriteLine(sumOfintegerPart); 107 108 Console.Write("result:"); 109 110 // 这里实现的是整数部分与小数部分的拼接 111 Console.WriteLine(sumOfintegerPart+sumOfDecimalsPart.ToString().Substring(1)); 112 Console.ReadKey(); 113 } 114 } 115 }
2 show1
show2
以上是关于C#控制台基础 无符号十六进制小数转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章
将十进制转换为小数点后两个零的字符串,和逗号? C# [重复]
C#Winform基础 八进制转换为十六进制(无符号,整数)