我有一个标签来显示无符号整数,它有一个最大长度。我想格式化数字显示如下:
1 = "1"
1000 = "1,000"
12400 = "12.4k"
101,800,000 = "102M" // !!!
1,849,000 = "1.85M"
所以,我最终得到了一个最大长度为5的字符串。
我的范围从0到199,999,999。
有没有办法在不处理很多情况的情况下这样做,即多个间隔?
答案 0 :(得分: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 :(得分:1)
此处的答案显示了如何以多种方式执行此操作:Round numbers with K suffix
不幸的是,如果没有至少相当数量的案例,我不知道有任何办法。但是上面问题中的一些答案相当优雅并且代码量最少。