C# 将数据行中的字符串转换为双精度
我正在从web读取csv文件并将其转换为数据表。第一列是一个字符串。第二、第三和第四列是数字。我想把第二、第三和第四列转换成双精度。我在下面编写了执行此任务的方法。但是,当我执行转换“Convert.ToDouble”并将其存储回数据行时,它似乎将其保留为字符串对象C# 将数据行中的字符串转换为双精度,c#,asp.net,datatable,datarow,C#,Asp.net,Datatable,Datarow,我正在从web读取csv文件并将其转换为数据表。第一列是一个字符串。第二、第三和第四列是数字。我想把第二、第三和第四列转换成双精度。我在下面编写了执行此任务的方法。但是,当我执行转换“Convert.ToDouble”并将其存储回数据行时,它似乎将其保留为字符串对象 public static DataTable ConvertCSVtoDataTable(string strFilePath) { HttpWebRequest req = (HttpWebRequest)WebRequ
public static DataTable ConvertCSVtoDataTable(string strFilePath)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strFilePath);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string[] headers = sr.ReadLine().Split(',');
DataTable dt = new DataTable();
foreach (string header in headers)
{
dt.Columns.Add(header);
}
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(',');
DataRow dr = dt.NewRow();
for (int i = 0; i < headers.Length; i++)
{
switch (i)
{
//Convert columns 1,2, and 3 to double
case 1:
dr[i] = Convert.ToDouble(rows[i]);
break;
case 2:
dr[i] = Convert.ToDouble(rows[i]);
break;
case 3:
dr[i] = Convert.ToDouble(rows[i]);
break;
default:
dr[i] = rows[i];
break;
}
}
dt.Rows.Add(dr);
}
return dt;
}
公共静态数据表ConvertCSVtoDataTable(字符串strFilePath)
{
HttpWebRequest req=(HttpWebRequest)WebRequest.Create(strFilePath);
HttpWebResponse resp=(HttpWebResponse)req.GetResponse();
StreamReader sr=新的StreamReader(resp.GetResponseStream());
string[]headers=sr.ReadLine().Split(',');
DataTable dt=新的DataTable();
foreach(标头中的字符串标头)
{
dt.Columns.Add(表头);
}
而(!sr.EndOfStream)
{
string[]rows=sr.ReadLine().Split(',');
DataRow dr=dt.NewRow();
for(int i=0;i
添加列时需要指定列类型。将创建列的代码更改为类似以下内容(基于您希望的列类型double
):
此代码将创建前三列的类型为double
,其余列的类型为string
引述此文:
默认情况下,新列的数据类型为string
如果不指定类型,则会得到一列,默认类型为
string
Replaceforeach
循环到
for (int i = 0; i < headers.Length; i++)
{
if (i >= 1 && i <= 3)
dt.Columns.Add(headers[i], typeof(double));
else
dt.Columns.Add(headers[i]);
}
for(int i=0;i=1&&i而不是:
foreach (string header in headers)
{
dt.Columns.Add(header);
}
使用
for(int i=0;i
这里有一些很棒的答案。谢谢。
foreach (string header in headers)
{
dt.Columns.Add(header);
}
for (int i = 0; i < headers.Count(); i++ )
{
switch (i)
{
case 1: case 2: case 3:
dt.Columns.Add(headers[i], typeof(double));
break;
default:
dt.Columns.Add(headers[i], typeof(string));
break;
}
}