2012-08-15 78 views
3

我有一個標籤來顯示一個無符號的整數,它有一個最大長度。我想格式化數字將顯示如下:如何將數字格式設置爲具有相同的數字位數?

1   = "1" 
1000  = "1,000" 
12400  = "12.4k" 
101,800,000 = "102M" // !!! 
1,849,000 = "1.85M" 

所以,我結束了與最大lenght串5

我的範圍是從0至199,999,999。

有沒有辦法做到這一點,而不處理很多情況下,即許多間隔?

+1

有關問題的要求似乎過於具體爲它有一個已經存在的解決方案正在做你想做的事情。您可能必須編寫自己的功能。另外,1.800.000 =「1,85M」如何?如果你的範圍達到最高1,999,999,你怎麼能得到101.800.000 =「102M」? – Shadowxvii 2012-08-15 14:33:09

+0

是101.800.000一個有效的情況下,考慮到「範圍從0到1,999,999」。 ? – 2012-08-15 14:33:40

+0

對不起,我與範圍雜亂,與1.85M和分隔符(在我的語言中「。」是「,」和「,」是「。」)... – Roberto 2012-08-15 14:38:28

回答

2

我可能爲時已晚,但這裏的返回格式的數字擴展方法,只要你想:

public static string ToShortString(this int n) 
{ 
    if (n >= 1e8) 
    { 
     return (Math.Round((double)n/1e6, 0)).ToString() + "M"; 
    } 
    else if (n >= 1e7) 
    { 
     return (Math.Round((double)n/1e6, 1)).ToString() + "M"; 
    } 
    else if (n >= 1e6) 
    { 
     return (Math.Round((double)n/1e6, 2)).ToString() + "M"; 
    } 
    else if (n >= 1e5) 
    { 
     return (Math.Round((double)n/1e3, 0)).ToString() + "K"; 
    } 
    else if (n >= 1e4) 
    { 
     return (Math.Round((double)n/1e3, 1)).ToString() + "K"; 
    } 
    else if (n >= 1e3) 
    { 
     return n.ToString("##,#"); 
    } 
    else 
    { 
     return n.ToString(); 
    } 
} 

測試:

Console.WriteLine((5).ToShortString());   // displays 5 
Console.WriteLine((55).ToShortString());  // displays 55 
Console.WriteLine((555).ToShortString());  // displays 555 
Console.WriteLine((5555).ToShortString());  // displays 5,555 
Console.WriteLine((55555).ToShortString());  // displays 55.6K 
Console.WriteLine((555555).ToShortString()); // displays 556K 
Console.WriteLine((5555555).ToShortString()); // displays 5.56M 
Console.WriteLine((55555555).ToShortString()); // displays 55.6M 
Console.WriteLine((555555555).ToShortString()); // displays 556M 
1

這這裏回答瞭如何做一個多種方式:Round numbers with K suffix

不幸的是,我不知道有什麼辦法做到這一點沒有至少有相當數量的案件。但上述問題中的一些答案相當優雅,並且代碼量最小。

相關問題