2012-08-13 64 views
1

少了一些我的代码在我的应用程序下面一行:值必须大于无穷

packsize.CompanyPrice = (decimal)Reader["CompanyPrice"]; 

,但它提出了when casting from a number, the value must be a number less than infinity

我已经设置数据库数据类型为双的错误,但我应用程序是十进制的。它会导致这个问题吗?

或者我缺少这里的东西?

+2

那么,“CompanyPrice”的传入值是什么?请注意,'decimal'的最大值为79,228,162,514,264,337,593,543,950,335(这是公平的,非常巨大......取决于您使用的是哪种货币) – 2012-08-13 10:30:57

+3

在投射到''公司价格'之前,'Reader [“CompanyPrice”]的内容是什么? decimal'? – 2012-08-13 10:31:26

+0

现在它的值为0. – 2012-08-13 10:32:38

回答

0

阅读器[“CompanyPrice”]返回一个值是无穷大或我猜测NaN。其设置为int.MaxValue或decimal.MaxValue

+0

我已经将数据库数据类型设置为double,但在我的应用程序中它是十进制的。它会导致这个问题吗? – 2012-08-13 10:54:04

+0

如果数据来自数据库,请使用double.TryParse。不要直接从字符串转换为小数。 – 2012-08-13 11:08:52

0

尝试铸造之前(十进制) 为32位int最小值为-2147483648,最大为2147483647

+0

十进制最大值为79,228,162,514,264,337,593,543,950,335 ...'decimal“不是'Int32' – 2012-08-13 10:42:39

0

我夹紧阅读器[“CompanyPrice”]的值想你想投一个DBNull的价值,因此你所得到的错误

好,如果你能为Reader["CompanyPrice"]添加一个检查为DBNull

if(Reader["CompanyPrice"] != DBNull.Value) 
{ 
} 

这样的事情可以瑞普领袖您的问题

object obj = DBNull.Value; 
decimal somdec = (decimal)obj; // Specified cast is not valid 

编辑

如果其双重的装箱表示,那么你需要将它转换回double,然后做演员到小数。

+0

我已经将数据库数据类型设置为double,但在我的应用程序中它是十进制的。它会导致这个问题吗? – 2012-08-13 10:57:26

+0

是的,它可能是问题,如果它已经双 - >对象,所以当你回来时你需要得到双精度,然后小数点,这是最好的[这里解释](http://blogs.msdn.com/b /ericlippert/archive/2009/03/19/representation-and-identity.aspx) – V4Vendetta 2012-08-13 11:04:46