2012-08-13 65 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