2012-08-15 76 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

不幸的是,我不知道有什么办法做到这一点没有至少有相当数量的案件。但上述问题中的一些答案相当优雅,并且代码量最小。

相关问题