2013-07-22 54 views
5

我的代碼是這樣的int.TryParse不工作

string asd = "24000.0000"; 
int num2; 
if (int.TryParse(asd, out num2)) 
{ 

    // It was assigned. 
} 

現在執行代碼永遠不會進入到若情況下,這意味着嘗試解析不工作。任何人都可以告訴我代碼有什麼問題。

注意:在第一步中將值24000.0000專門指定爲字符串。

+5

要問,爲什麼這個問題得到downvoted? –

+0

什麼是您的系統上的int.MaxValue?你的文化背景是什麼,具體是什麼。您的文化設置中的小數分隔符還是另一個分隔符? – Dominik

+0

@KaushalDeSilva - 沒有downvote,但可能是因爲簡單閱讀[Int32.TryParse](http://msdn.microsoft.com/library/f02979c7.aspx)將回答這個問題。 – Corak

回答

9

使用第二個TryParse過載,允許您指定NumberStyle參數以允許小數。

int val =0; 
var parsed = int.TryParse("24000.0000", 
       NumberStyles.Number, 
       CultureInfo.CurrentCulture.NumberFormat, 
       out val); 
+1

謝謝..所有這些答案,這使我的情況有所不同.. – Athul

+1

我強烈建議使用'NumberStyles.Number'值,因爲它也將覆蓋白色空間,數千分隔符,可能還有最重要的:負號。就像現在一樣,輸入'-24000.0000'將會失敗。 –

+0

@ChrisSinclair哦整齊,謝謝你的提示。 – asawyer

8

對於int,您不能有小數位。

編輯:

string asd = "24000.000"; 

int dotPos = asd.LastIndexOf('.'); 

if (dotPos > -1) { 
    asd = asd.Substring(0, dotPos); 
} 

int num2; 

if (int.TryParse(asd, out num2)) 
{ 
// It was assigned. 
} 

編輯:

正如其他的答案中指出,有更好的方式來處理與轉換。

+0

你能告訴我,我可以做些什麼來消除小數位,並使它成爲一個整數,這樣我就可以對它做一些數學計算。 – Athul

+1

@AthulKSurendran:最簡單的解決方案是使用[this overload](http://msdn.microsoft.com/en-us/library/zf50za27.aspx):'if(int。TryParse(asd,NumberStyles.Number,null,out num2))' –

+0

@ChrisSinclair Cool。我永遠不會記得所有這些轉換的重載。歡呼指出那傢伙:) –

2

這應該爲你工作:

string asd = "24000.0000"; 
int num2; 
decimal tmpNum; 
if (decimal.TryParse(asd, out tmpNum)) 
{ 
    num2 = (int)tmpNum; 
    // It was assigned. 
} 
2

您已要求它解析int,但給定了doublefloat。由於它無法解析數字,它將返回false並將num2設置爲零。