用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的长度。

————————————
具体解释里的加粗字体是几个比较常见的方法,有不懂的可以再去找更详细的解释,了解他们更多的重载方法。

第一次写,记录自己的学习过程,可能会有些错误,欢迎指正。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rhxznp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值