2016-10-20 41 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(",",".");