字符串格式数字数千123K,数百万123M,数十亿123B

有没有办法使用字符串格式化器来格式化数千,百万,数十亿到123K,123M,123B而无需更改代码来将值除以千,百万或十亿?

String.Format("{0:????}", LargeNumber) 

有不同的方法来实现这一点,但对我来说,最简单,最快捷的方法是使用“,”自定义说明符

 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在评论中的注释。

  • 我在这个例子中编写了一个decimal数的方法,你可以为它写一些覆盖方法来支持intlongdouble来使用它而不需要任何强制转换,例如:

    myIntNumber.ToKMB();

    myLongNumber.ToKMB();

    myDoubleNumber.ToKMB();

    myDecimalNumber.ToKMB();

您可以实现一个ICustomFormatter ,它将值除以千,百万或十亿,并像这样使用它:

 var result = string.Format(new MyCustomFormatter(), "{0:MyFormat}", number);