0

我在 .NET 项目中使用 humanizr.net 来格式化日期,它工作得非常好。

现在我想将大数字格式化为这样的短可读数字:1234 -> 1.2K 50,323 -> 50.3K 就像 Facebook 一样计数......

有没有办法使用 Humanizer 做到这一点?

4

2 回答 2

1

尝试这样的事情:

public static string FormatLargerNumbers(double number)
{
    string[] prefix = { string.Empty, "K", "M" };

    var absnum = Math.Abs(number);

    int add;
    if (absnum < 1)
    {
        add = (int)Math.Floor(Math.Floor(Math.Log10(absnum)) / 3);
    }
    else
    {
        add = (int)(Math.Floor(Math.Log10(absnum)) / 3);
    }

    var shortNumber = number / Math.Pow(10, add * 3);

    return string.Format("{0}{1}",shortNumber.ToString("0.#"), prefix[add]);
}

string formatted = FormatLargerNumbers(50323);
// Output : 50,3K
于 2017-12-20T11:58:17.307 回答
0

这是一个非常好的解决方案,幸运。

我也需要这个,并且刚刚稍微修改了您的解决方案,以便在没有它的情况下我得到一个超出范围的异常,我也可以显示为“十亿”。在这里张贴以防其他人需要数十亿美元。

public static string FormatLargerNumbers(double number)
{
    string[] prefix = { string.Empty, "K", "M", "B" };

    var absnum = Math.Abs(number);

    double add;
    if (absnum < 1)
    {
        add = (int)Math.Floor(Math.Floor(Math.Log10(absnum)) / 3);
    }
    else
    {
        add = (int)(Math.Floor(Math.Log10(absnum)) / 3);
    }

    var shortNumber = number / Math.Pow(10, add * 3);

    return string.Format("{0}{1}", shortNumber.ToString("0.#"), 
    (prefix[Convert.ToInt32(add)]));
}
于 2020-09-01T23:30:06.750 回答