⽤C#将带⼩数⼗进制数转换为⼆进制数(带详细介绍)
namespace program
{
class Program
{
static void Main(string[] args)
{
string a, c = null, c1 = null;
int b, b1;
a = Console.ReadLine();
if (a.IndexOf('.') > 0)
{
二进制小数如何转换成十进制
string dot = a.Split('.')[1];
double z1 = Convert.ToInt32(dot) * Math.Pow(10, -dot.Length);
for (int i = 0; i < 6; i++)    //保留了六位⼆进制⼩数
{
b1 = (int)(z1 * 2);
z1 = z1 * 2 - b1;
c1 = c1 + Convert.ToString(b1)
}
c1 = "." + c1;
}
string inum = a.Split('.')[0];
int z = Convert.ToInt32(inum);
for (; z != 0; )
{
b = z % 2;
z = z / 2;
c = Convert.ToString(b) + c;
}
Console.WriteLine("{0}{1}", c, c1);
}
}
}
—————————————————————————(看懂代码的,下⾯解释部分可选择性观看)
⼤体解释:
这段代码的核⼼是⼗转⼆的⽅法:整数部分,除⼆取余,逆序排列。⼩数部分,乘⼆取整,正序排列。这两部分转换都⽤⼀个简单的for循环就可以得到。
⽽如何把得到的每个⼆进制数按正确顺序排列起来,我认为最简单的⽅法就是化成字符串形式。就是这两句代码 c=Convert.Tostring(b)+c//将余数b转化为字符型,并将新得的余数放在前⾯,也就是逆序排列(整数部分) c1=c1+Convert.Tostring(b1)//将整数b1转化为字符型,并将新得的整数放在后⾯,也就是正序排列(⼩数部分)
分别得到这两部分的⼆进制后,便可以合在⼀起输出啦。因为整数⼆进制和⼩数⼆进制部分都是字符串形式,所以合在⼀起输出是⾮常简单的。
具体解释:
if (a.IndexOf(’.’) > 0)这句话是判断a中是否有⼩数点。该语句中包含的⽅法IndexOf(’.’),它的功能是在a
字符串中寻字符’.‘并将⾸次出现的位置返回,如果没到该字符,返回-1。 这⾥之所以判断a是否含有⼩数点(a是否是⼩数),是因为如果a不是⼩数还执⾏字符串的分割会导致索引超出数组界限。
(它根本分不开,因为不到⼩数点,是不存在a.Split(’.’)[1]的,这⾥的[1]就是超出数组界限了,它只有⼀块,索引只能是[0]) string dot = a.Split(’.’)[1]; 把字符串a分割,以’.‘为界限,把⼩数点后⾯的部分(也就是第⼆部分,所以索引是1)赋给dot(例如a是12.54,把54赋给dot)。
同理,string inum = a.Split(’.’)[0]; 就是把⼩数点前⾯代表整数的字符串(也就是第⼀部分,所以索引是0)赋给inum.
double z1 =Convert.ToInt32(dot) * Math.Pow(10, -dot.Length); 把⼩数部分数字转化为⼩数(例如12.54的⼩数部分是54,把54转化为0.54)。Math. Pow(x,y)意为数字x的y次幂。在这⾥就是10的负长度次幂。dot. length就是计算dot的长度。
————————————
具体解释⾥的加粗字体是⼏个⽐较常见的⽅法,有不懂的可以再去更详细的解释,了解他们更多的重载⽅法。第⼀次写,记录⾃⼰的学习过程,可能会有些错误,欢迎指正。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。