【问题标题】:Conversion of Binary fractions to Decimal in C# GUI在 C# GUI 中将二进制分数转换为十进制
【发布时间】:2014-07-24 12:41:20
【问题描述】:

如何在c#中将二进制分数转换为十进制?例如:1101.101 应该是 13.625,我得到 1.25,这是很远的。当我输入一个小数二进制数时,我似乎得到了错误,整个二进制数没有问题。如果需要,我可以显示我的代码。

代码:

double tempans = 0;
        double answer = 0;
        string finAns;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string[] temp = new string[5];
            string strHldr = textBox1.Text;
            bool isFractional = strHldr.Contains('.');
            double val1 = 0;
            double val2 = 0;

            if (!isFractional)
                finAns = ComputePart(strHldr);
            else
            {
                string wholeP = WholePart(strHldr);
                string deciP = DecimalPart(strHldr);
                val1 = double.Parse(ComputePart(wholeP));
                val2 = double.Parse(ComputeDeci(deciP));
                finAns = (val2 +  val2).ToString();
            }
            textBox1.Text = finAns;
        }
        private string ComputePart(string strHldr)
        {
            double length1 = strHldr.Length - 1;
            for (int i = 0; i < strHldr.Length; i++)
            {
                if (strHldr[i] == '1')
                {
                    tempans = Math.Pow(2, length1);
                    answer += tempans;
                }
                length1 -= 1;
            }
            length1 = 0;
            return answer.ToString();
        }
        private string ComputeDeci(string number)
        {
            double ans = 0;
            double counter = 1;
            double finalAns = 0;
            for (int i = 0; i < number.Length; i++)
           { 
                ans = counter * 0.5;
                counter = ans;
                if (number[i] == '1')
                {
                    finalAns += counter;
                }
            }
            return finalAns.ToString();
        }
        private string DecimalPart(string number)
        {
            int numCut = number.IndexOf('.');
            return number.Substring(numCut + 1);
        }
        private string WholePart(string number)
        {
            return ((int)Math.Floor(double.Parse(number))).ToString();

        }
    }
}

【问题讨论】:

  • 显示您的代码。需要。
  • 我的错。这是一个错字。发布代码,brb。
  • 我对它是 13.625 的评论是无稽之谈。抱歉,11.625 是您想要的答案。

标签: c#


【解决方案1】:

这只是您的代码中的一个错字:

finAns = (val2 +  val2).ToString();

应该是

finAns = (val1 +  val2).ToString();

请注意,val2 被添加到 val2 而不是 val1 被添加到 val2。

【讨论】:

  • 这解释了 1.25
  • 哇,伙计,我检查了超过 2 次,并没有注意到我从中得到了错误。谢谢。需要更多地专注于阅读我自己的代码。大声笑
  • 没问题。很抱歉建议它应该是 13.625 而不是 11.625,我脑子里放了个屁。
  • 不,你真好。 :)
猜你喜欢
  • 2020-10-27
  • 1970-01-01
  • 2012-12-26
  • 2023-03-27
  • 2014-04-21
  • 2020-09-10
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多