如何在c#中将带二进制数的字符串列表转换为十进制数 [英] How to convert string list with binary number to decimal number in c#

查看:131
本文介绍了如何在c#中将带二进制数的字符串列表转换为十进制数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用过这个

1 --------

temp = Convert.ToString(i,10);



2 -----

decimal.TryParse(i,out n);



结果是零



代码:

I used this
1--------
temp = Convert.ToString(i, 10);

2-----
decimal.TryParse(i, out n);

result are zero

code :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GenaticAlgo
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        int counter,decimal_val = 0;
       // string i;
        List<string> generatedNum = new List<string>();
        List<string> EvalValue = new List<string>();

        int GetSL(int final, int start, int pre)
        {
            int size, length;
            length = final - start;
            size = length * pre;
            while (size > 1)
            {
                size = size / 2;
                counter++;
            }
            return counter;
        }

        string temp;
        
        List<string> Generate(int NumOfPopSize, int LenChromosom)
        {
            Random ran = new Random();
            List<string> listOfRandom = new List<string>();
            for (int i = 0; i < NumOfPopSize; i++)
            {
                for (int j = 0; j < LenChromosom; j++)
                {
                    temp += ran.Next(0, 2);
                }
                listOfRandom.Add(temp);
                temp = " ";
            }
            return listOfRandom;
        }

        List<string> Eval(List<string> ListBinary)
        {
            List<int> ListInt = new List<int>();
          List<string>ListDec=new List<string>();
        //  string temp = "";
          decimal n ;

          foreach (string i in ListBinary)
          {
              ListInt=Convert.ToInt64(i)

          }
          /* for (decimal i = 0; i < ListBinary.Count; i++)
       {
           n =Convert.ToDecimal(i, 10);
           ListDec.Add(n.ToString());
       }*/

          /*   // return 0
             foreach (string i in ListBinary)
             {
                 decimal.TryParse(i, out n);
               
                 ListDec.Add(n.ToString());
                
             } */
          /* for (int i = 0; i <ListBinary.Count; i++)
          {
            //  temp = Convert.ToString(i, 10);
            // temp = Convert.ToInt64(i, 10);
            
                
              ListDec.Add(temp);
          }*/

          //foreach (i in ListBinary)
          //{
          //   temp = Convert.ToString(i, 10);
          //    ListDec.Add(temp);
          //}

          // temp = "";
          /*   int  base_val = 1, rem;
           foreach (string i in ListBinary)
           {
               temp = i;
               int num = Convert.ToInt32(temp);
               while (num > 0)
               {
                   rem = num % 10;
                   decimal_val = decimal_val + rem * base_val;
                   num = num / 10;
                   base_val = base_val * 2;
               }
               ListDec.Add((decimal_val).ToString());
           }*/

              return ListDec;

        }
        private void btnShow_Click(object sender, EventArgs e)
        {
           

            int Start = int.Parse(textbStart.Text);
            int Final = int.Parse(textbFinal.Text);
            int precesion = int.Parse(textbPrecision.Text);
            int PopSize = int.Parse(textbPopulationSize.Text);
            int numOfGenerate = GetSL(Final, Start,precesion);

            generatedNum = Generate(numOfGenerate, PopSize);
            listBoxRandom.DataSource = generatedNum;
           
        }

        private void btnEvaluation_Click(object sender, EventArgs e)
        {
            EvalValue = Eval(generatedNum);
            listBoxFitness.DataSource = EvalValue;
        }
    }
}




推荐答案

请尝试以下....这将有效...





Please try the below....this will work...


static void Main(string[] args)
        {
            List<string> listBinary = new List<string>();
            listBinary.Add("101");
            listBinary.Add("111");
            listBinary.Add("110");
            listBinary.Add("1111");
            List<string> listDecimal = new List<string>();

            foreach (var str in listBinary)
            {
                listDecimal.Add(ConvertBinaryToDecimal(str));
            }
            foreach (var str in listDecimal)
            {
                Console.WriteLine(str);
            }

        }

        private static string ConvertBinaryToDecimal(string a)
        {
            double str = 0;
            char[] arr = a.ToCharArray();
            int i = arr.Length - 1;
            foreach (char c in arr)
            {
                str = str + Math.Pow(2, i)*Convert.ToDouble(c.ToString());
                i--;
            }
            return str.ToString();
        }


这篇关于如何在c#中将带二进制数的字符串列表转换为十进制数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆