簡體   English   中英

將DataRow中的字符串轉換為double

[英]Convert strings in DataRow to double

我正在從網上讀取一個csv文件,並將其轉換為DataTable。 第一列是一個字符串。 第二,第三和第四列是數字。 我想將第二,第三和第四列轉換為兩倍。 我已經編寫了下面的方法來執行此任務。 但是,當我執行“ Convert.ToDouble”轉換並將其存儲回數據行時,似乎將其保留為字符串對象。

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;
}

添加列時需要指定列類型。 將創建列的代碼更改為如下所示(基於您要輸入double列):

foreach (string header in headers.Take(3))
{
    dt.Columns.Add(header, typeof(double));
}

foreach (string header in headers.Skip(3))
{
    dt.Columns.Add(header, typeof(string));
}

此代碼將創建類型為double前三列,其余類型為string的列。

從此MSDN參考引用

默認情況下,新列的數據類型為字符串

如果您未指定類型,則將獲得默認類型為string

替換foreach循環

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]);
}

代替:

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM