2013-03-06 50 views
0

我有一個從數據庫獲取數據並將其作爲字符串存儲的類。格式化類的數字

sAnswer可以是任何數據類型,通常是int。當它是一個int,我試圖讓它格式化爲逗號分隔符。 (1000000 - > 1,000,000)我該怎麼做?

使用Formatvar val = string.Format("{0:n0}", sAnswer);不起作用。

+0

你是什麼意思「有逗號分隔符」嗎?你的意思是,如果它是1000000這樣的大數字,它將被格式化爲「1,000,000」? – 2013-03-06 14:21:47

+0

這是正確的,我會改變那在OP – Mike 2013-03-06 14:23:16

回答

3

將不是字符串的值轉換爲字符串時,會發生格式化。您無法將格式應用於已經是字符串的值。你將不得不在string轉換回int暫時

string val = String.Format("{0:n0}", Int32.Parse(sAnswer)); 

可以影響Int32.Parse嘗試使用的NumberStyles常數

string val = String.Format("{0:n0}", Int32.Parse(sAnswer, 
               NumberStyles.AllowLeadingWhite | 
               NumberStyles.AllowTrailingWhite| 
               NumberStyles.AllowExponent)); 

或者簡單地通過使用按位組合轉換的方式枚舉常量,給你一個最大的靈活性。如果sAnswer可以包含無效的條目(例如像一個空字符串),執行安全轉換

string val; 
int i; 
if (Int32.TryParse(sAnswer, out i)) { 
    val = String.Format("{0:N0}", i); 
} else { 
    val = ""; // Assign a default value here 
} 
+0

我得到這個錯誤:'輸入字符串不是在一個正確的格式。' – Mike 2013-03-06 14:30:30

+0

'sAnswer'是什麼?它必須是代表有效「int」的文本。 – 2013-03-06 14:31:39

+0

是的!最後的答案奏效了!謝謝! – Mike 2013-03-06 14:45:35

2

這是否對你的工作

int answerInt; 
if (int.TryParse(sAnswer, out answerInt)) 
{ 
    sAnswer = answerInt.ToString("#,0", CultureInfo.InvariantCulture) 
} 
+0

如果你打算用'out'參數覆蓋'answerInt',那麼如果它沒有被解析,它就會被扔掉(設置爲「0」),所以不要指定默認值。 – 2013-03-06 14:25:27

+0

@ChrisSinclair,謝謝我的不好 – Kane 2013-03-06 14:25:56

+0

你不能將'string'強制轉換爲int。你將得到異常'「不能將類型'字符串'轉換爲'int'」'。 – 2013-03-06 14:27:04