Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串从列表c转换为浮点或双精度#_C#_List_Type Conversion - Fatal编程技术网

C# 将字符串从列表c转换为浮点或双精度#

C# 将字符串从列表c转换为浮点或双精度#,c#,list,type-conversion,C#,List,Type Conversion,我正在尝试将字符串列表中的所有数字转换为float。我不确定为什么列表中的所有项目都是char,它将每个单个数字转换为char,而不是将数字转换为空格。下面是代码。如果第一个输入是2,它将创建2个列表,比如说12333和22344 从列表1中,我需要mm成为12/23/33而不是1/2/2/3/3 int nrMagazine = Convert.ToInt32(Console.ReadLine()); List<String> mag = new List<String&g

我正在尝试将字符串列表中的所有数字转换为float。我不确定为什么列表中的所有项目都是char,它将每个单个数字转换为char,而不是将数字转换为空格。下面是代码。如果第一个输入是2,它将创建2个列表,比如说
12333
22344

从列表1中,我需要
mm
成为
12/23/33
而不是
1/2/2/3/3

int nrMagazine = Convert.ToInt32(Console.ReadLine());

List<String> mag = new List<String>();

string prop = "";
for(int i = 0; i < nrMagazine;i++)
{
    string profitTrimestre = Console.ReadLine();
    profitTrimestre.Split();
    mag.Add(profitTrimestre);

    //cel mai profitabil trimestru,trimestru 1 = m[0],1=m[1]
    //cel mai profitabil magazin,mag 1,2,3,4,n
}
foreach(string m in mag)
{
    foreach(string mm in m)
    {
        Console.WriteLine(mm);
    }
}
int nrMagazine=Convert.ToInt32(Console.ReadLine());
List mag=新列表();
字符串prop=“”;
对于(int i=0;i
也许您只需要在空格上拆分行,并实际将拆分值指定给mag

string[] mag = profitTrimestre.Split(' ');
然后,您应该能够使用一个foreach循环该列表中的每个字符串:

foreach(string m in mag)
{
    Console.WriteLine(m);
}
如果要将单个字符串部分转换为双精度,可以按如下方式执行:

double d = double.Parse(m);
如果要避免字符串不是有效的双精度表示形式时出现异常,也可以这样做:

double.TryParse(m, out double d);

当前代码中存在多个问题

我不知道为什么列表中的所有项目都是字符

因为您有另一个字符串循环,它隐式地使用枚举器按字符迭代字符串。您应该能够使用
convert
class将其转换为float:

foreach(string m in mag)
{
    var number = Convert.ToDouble(m);
}
其次,如果数字以空格分隔,则使用
Split
重载,该重载使用字符进行拆分:

var splitted = profitTrimestre.Split(new char[]{' '}, StringSplitOption.RemoveEmptyEntries);
然后循环:

foreach(var item in splitted)
  mag.Add(item);
你可以试试这个

    public static void Main(string[] args)
    {
        var text = Console.ReadLine();
        var strings = text.Split(' '); // This splits the 11 22 33 to three string values.
        var numbers = strings.Select(a =>
        {
            if (float.TryParse(a, out float number))
                return number;
            return 0;
        }).ToList(); // This converts 3 strings to 3 float
    }
或者您可以尝试最短版本(感谢Prasad Telkikar)


profitTrimestre.Split()
将返回一个数组,而当前您对该数组不做任何操作。请尝试改为:

Console.WriteLine("Insert the number of lists: ");
if(int.TryParse(Console.ReadLine(),out int nrMagazine)) //Never trust user's inputs
{
    List<string> mag = new List<string>();

    for(int i = 0; i < nrMagazine;i++)
    {
        Console.WriteLine($"Insert List {i+1}: ");
        mag.Add(Console.ReadLine());    
    }
    foreach(string m in mag) //iterates over each input string
    {
        foreach(string mm in m.Split(' ')) //splits each entry and iterates over the itens
        {
            Console.WriteLine(mm);
            if(double.TryParse(mm, out double myDouble)) //You can also pass a Culture
            {
                //Do something with your double
            }
            else
            {
                //Input not a double in the current culture
            }
        }
    }
}
else
{
    Console.WriteLine("The input was not an integer");
}
Console.WriteLine(“插入列表数量:”);
if(int.TryParse(Console.ReadLine(),out int nrMagazine))//从不信任用户的输入
{
List mag=新列表();
对于(int i=0;i
我想这就是你需要的

        Dictionary<int, IEnumerable<float>> nrMagazine = new Dictionary<int, IEnumerable<float>>(); //creates dictionary

        int.TryParse(Console.ReadLine(), out int x); //input number for iterations here

        for (int i = 0; i < x; i++)
        {
            nrMagazine.Add(i, Console.ReadLine().Split(' ').Select(s => { float.TryParse(s, out float y); return y; })); //builds floats list and adds it to dictionary x times
        }

        nrMagazine.Keys.ToList().ForEach((i) => Console.WriteLine("Magazine: " + i + ", Profits:  " + String.Join(", ", nrMagazine[i]))); //prints items from dictionary 
Dictionary=newdictionary()//创建字典
int.TryParse(Console.ReadLine(),out int x)//在此处输入迭代次数
对于(int i=0;i{float.TryParse(s,out float y);返回y;});//构建float列表并将其添加到字典x次
}
nrMagazine.Keys.ToList().ForEach((i)=>Console.WriteLine(“杂志:+i+”,利润:+String.Join(“,”,nrMagazine[i]))//从字典中打印项目

您只需要1个foreach,它将与列表iTen交互
m
已经是一个字符串,因此第二个
foreach
正在迭代该字符串的字符。也
profitTrimestre.Split()
返回您正在划分的数组,
profitTrimestre
是用户输入的数组。
Convert.ToInt32(Console.ReadLine())
-这只是一个等待发生的异常。永远不要相信用户输入!。改为使用
int.TryParse
。问题是用户将输入4个由1个空格分隔的浮点数,输入不必是字符串?一行如何
Array.ConvertAll(text.Split(“”),x=>float.TryParse(x,out float number)?number:0.ToList()
        Dictionary<int, IEnumerable<float>> nrMagazine = new Dictionary<int, IEnumerable<float>>(); //creates dictionary

        int.TryParse(Console.ReadLine(), out int x); //input number for iterations here

        for (int i = 0; i < x; i++)
        {
            nrMagazine.Add(i, Console.ReadLine().Split(' ').Select(s => { float.TryParse(s, out float y); return y; })); //builds floats list and adds it to dictionary x times
        }

        nrMagazine.Keys.ToList().ForEach((i) => Console.WriteLine("Magazine: " + i + ", Profits:  " + String.Join(", ", nrMagazine[i]))); //prints items from dictionary