2013-08-29 34 views
1

我有一個鼠標移動座標,的String.format只顯示第一n(2)位數字在若干

例如:

s = string.Format("{0:D4},{1:D4}", nx, ny); 

the result s is "0337,0022" 

問題是如何顯示只有兩個在前面的數字只要?

我想獲得:

s is "03,00" 

下面是另一個例子:

s = "0471,0306" 

我想:

s = "04,03" 

當座標爲 「 - 」

考試PLE

S =「-0471,0306」

我想是:

s = "-04,03" 
+0

我不相信這隻能用標準格式字符串來完成。即:可能必須轉換爲字符串*第一個*然後取相關部分。 – user2246674

+0

如果'nx'是12345,你想'12'作爲輸出還是'123'? – Gabe

回答

2

只要分割的逗號和然後子串中的每一部分的前兩個字符的字符串,如這樣的:

string result = String.Empty; 
string s = String.Format("{0:D4},{1:D4}", nx, ny); 
string[] values = s.Split(','); 

int counter = 0; 
foreach (string val in values) 
{ 
    StringBuilder sb = new StringBuilder(); 
    int digitsCount = 0; 

    // Loop through each character in string and only keep digits or minus sign 
    foreach (char theChar in val) 
    { 
     if (theChar == '-') 
     { 
      sb.Append(theChar); 
     } 

     if (Char.IsDigit(theChar)) 
     { 
      sb.Append(theChar); 
      digitsCount += 1; 
     } 

     if (digitsCount == 2) 
     { 
      break; 
     } 
    } 

    result += sb.ToString(); 

    if (counter < values.Length - 1) 
    { 
     result += ","; 
    } 

    counter += 1; 
} 

注:這將在您的s串有逗號分隔值的任何數量的工作。

+1

如果nx或ny小於10,則會導致IndexOutOfRange異常。它也不會產生OP希望數字<1000的輸出.337將顯示爲「37」而不是「03」。 – shf301

+0

@ shf301 - 好點,答案更新。 –

+0

@Alexbelek - 在你的例子中nx和ny的值是什麼,給了你「0259,001825,18」的結果? –

3
s =string.Format("{0},{1}", 
       string.Format("{0:D4}", nx).Substring(0,2), 
       string.Format("{0:D4}", ny).Substring(0,2)); 
+0

@Naren你有沒有測試?不會有例外,但它會給「00,00」輸出 – Damith

+0

,對不起,我忘了D4。 – Naren

0

我願意做這樣說:你使用的串

Func<int, string> f = n => n.ToString("D4").Substring(0, 2); 
var s = string.Format("{0},{1}", f(nx), f(ny)); 
0

檢查號碼前。

 var s1 = nx.ToString(); 
     var s2 = ny.ToString(); 
     // Checks if the number is long enough 
     string c1 = (s1.Count() > 2) ? s1.Substring(0, 2) : s1; 
     string c2 = (s2.Count() > 2) ? s2.Substring(0, 2) : s2; 
     Console.WriteLine("{0},{1}",c1,c2);