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

时间:2012-07-31 01:39:28

标签: c# string-formatting

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

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

3 个答案:

答案 0 :(得分:71)

有不同的方法可以达到这个目的,但对我来说最简单快捷的方法是使用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));

答案 1 :(得分:13)

我在扩展方法中使用这种格式组合(只需将其添加到您的项目中即可享受)

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();

  •   

答案 2 :(得分:4)

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

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