2016-10-20 70 views
-2
foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
int num = ((int)dr.ItemArray[0]/14) * 12.5; 
} 

這將作爲無效轉換返回。沒有轉換,雖然它是一個對象被視爲一個整型。我將如何獲得此轉換的工作?將DataRow.ItemArray [x]轉換爲int

+0

那麼,什麼是'dr.Item(0 )'?它是什麼類型?還要注意的是,你正在做的整數除法可能不會給你預期 –

+1

結果你可以用'int.TryParse' https://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110)的.aspx – Valentin

+0

這不是你的答案,但是,要查看在數據行的列是博士[0]或博士[「列名」] –

回答

1

聲望太低發表評論。

嘗試:

(int)Math.Round(((int)dr.Item(0)/14) * 12.5) 

您可以使用Math.Floor()或Math.Ceiling()如果你需要一個特定的舍入方向。

1

應該double沒有int這就是爲什麼無效轉換錯誤你知道的。

double num = ((int)dr.ItemArray[0]/14) * 12.5; 

double a = 0; 
bool test = double.TryParse(dr.ItemArray[0].ToString(), out a); 
if (test) 
{ 
    int pot = (int)((a/14) * 12.5); 
} 

希望幫助,

+0

與上面相同的問題。 (int)強制轉換無效。 – user1327418

+0

@ user1327418請檢查,更新。 – Berkay

+0

仍然得到一個錯誤 – user1327418

1

試試這個

foreach (DataRow dr in ds.Tables[0].Rows) 
{ 
    int number1 = 0; 
    bool canConvert = Int32.TryParse(dr.Item(0), out number1); 

    if (canConvert == true) 
    int num = (Convert.ToInt32(dr.Item(0))/14) * 12.5; 


} 
+0

這仍然呈現一個對象(dr.Item(0))被用作一個Int。演員表無效。 – user1327418

+0

爲什麼不在塊內使用'number1'?並更新您的答案,問題中不再有'dr.Item'。 – Berkay

0

但是,什麼是dr[0]價值?

你能使用Convert.ToInt32(dr[0].ToString());

是價值與北歐打字例如5,72十進制數的文本表示你將不得不作出一個

Convert.ToInt32(dr[0].ToString().Replace(",",".");