2012-10-23 15 views
0

我只是想要来自数据表的值,数据来自SQL到datable.Also数据表有空值我猜这是问题,但也请你检查我当从一个数字铸造的值必须是一个小于无穷大的数字

string Maxmonthlytable = Math.Round((decimal)monthlytable.Rows[u][3], 2, MidpointRounding.AwayFromZero).ToString(); 

我得到的错误“从多家铸造时的值必须小于无穷的数”

+0

可能的重复:http://stackoverflow.com/questions/7636986/when-casting-from-a-number-the-value-must-be-a-number-less-than-infinity – Leri

回答

0

你可以尝试:

decimal num = 0; 
if (monthlytable.Rows[u][3] != DBNull.Value) 
    num = Math.Round((decimal)monthlytable.Rows[u][3], 2, MidpointRounding.AwayFromZero) 
string Maxmonthlytable = num.ToString(); 
+0

抛出相同的异常我可以做什么? –

+0

即使值不为空,我也有同样的异常。请帮忙 –

2

您合作ULD使用DataRow.Field方法支持nullables

decimal? num = monthlytable.Rows[u].Field<decimal?>(3); 
Console.Write(num.HasValue 
       ? Math.Round(num.Value, MidpointRounding.AwayFromZero) 
       : "no value"); 
-1

使用CAST (decimal)或使用CAST (int)相反的,你必须使用投(System.Decimal)(System.Int32),这将让这一问题消失。

+0

'decimal'和'int'分别是'System.Decimal'和'System.Int32'的别名。他们在各方面表现完全一致。 [根据文档](http://msdn.microsoft.com/en-us/library/ya5y69ds(v = vs.80).aspx),“C#类型关键字及其别名是可以互换的。” –

相关问题