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

Mik*_*e U 36 c# string-formatting

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

String.Format("{0:????}", LargeNumber)
Run Code Online (Sandbox Code Playgroud)

小智 76

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

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));
Run Code Online (Sandbox Code Playgroud)

  • value.ToString("0 ,,,.#B",CultureInfo.InvariantCulture)=> 1.2B (2认同)

RAM*_*RAM 18

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

((decimal)235).ToKMB();
// 235

((decimal)1235).ToKMB();
// 1.2K

((decimal)6271235).ToKMB();
// 6.27M

((decimal)93246571235).ToKMB();
// 93.247B
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 它为更大的数字返回更多细节,我喜欢它.

  • 它也支持负数.(感谢@Dusty在评论中的注释.

  • decimal在这个例子中为数字编写了一个方法,你可以编写一些覆盖方法来支持它int,long并且double在没有任何强制转换的情况下使用它,例如:

    myIntNumber.ToKMB();

    myLongNumber.ToKMB();

    myDoubleNumber.ToKMB();

    myDecimalNumber.ToKMB();

  • 值得注意的是,如果所有的`if`条件也包含负数,这涵盖了更完整的用例...例如,`if(num> 999 || num <-999)`. (2认同)