【发布时间】:2012-07-31 01:39:28
【问题描述】:
有没有一种方法可以使用字符串格式化程序将 Thousands、Millions、Billions 格式化为 123K、123M、123B,而无需更改代码以将值除以 Thousand、Million 或 Billion?
String.Format("{0:????}", LargeNumber)
【问题讨论】:
标签: c# string-formatting
有没有一种方法可以使用字符串格式化程序将 Thousands、Millions、Billions 格式化为 123K、123M、123B,而无需更改代码以将值除以 Thousand、Million 或 Billion?
String.Format("{0:????}", LargeNumber)
【问题讨论】:
标签: c# string-formatting
有不同的方法可以实现这一点,但对我来说最简单快捷的是使用the "," custom specifier
double value = 1234567890;
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,568K
Console.WriteLine(value.ToString("#,##0,K", CultureInfo.InvariantCulture));
// Displays 1,235M
Console.WriteLine(value.ToString("#,##0,,M", CultureInfo.InvariantCulture));
// Displays 1B
Console.WriteLine(value.ToString("#,##0,,,B", CultureInfo.InvariantCulture));
【讨论】:
我在扩展方法中使用了这种混合格式(只需将其添加到您的项目中即可享受)?
public static string ToKMB(this decimal num)
{
if (num > 999999999 || num < -999999999 )
{
return num.ToString("0,,,.###B", CultureInfo.InvariantCulture);
}
else
if (num > 999999 || num < -999999 )
{
return num.ToString("0,,.##M", CultureInfo.InvariantCulture);
}
else
if (num > 999 || num < -999)
{
return num.ToString("0,.#K", CultureInfo.InvariantCulture);
}
else
{
return num.ToString(CultureInfo.InvariantCulture);
}
}
用途:
((decimal)235).ToKMB();
// 235
((decimal)1235).ToKMB();
// 1.2K
((decimal)6271235).ToKMB();
// 6.27M
((decimal)93246571235).ToKMB();
// 93.247B
注意事项:
它会为更大的数字返回更多细节,我喜欢它。
它也支持负数。 (感谢@Dusty 在 cmets 中的注释。
我在这个例子中为
decimal数字写了一个方法,你可以为它写一些覆盖方法来支持int、long和double在没有任何转换的情况下使用它,例如:
myIntNumber.ToKMB();
myLongNumber.ToKMB();
myDoubleNumber.ToKMB();
myDecimalNumber.ToKMB();
【讨论】:
((decimal)100000).ToKMB()) 为其返回此结果:100k
if 条件也涵盖否定条件,则这涵盖了更完整的用例……例如,if(num > 999 || num < -999)。
您可以实现一个ICustomFormatter,将值除以千、百万或十亿,并像这样使用它:
var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number);
【讨论】: