3

符号なし整数を示すラベルがあり、最大長があります。次のように表示されるように数値をフォーマットしたいと思います。

1           = "1"
1000        = "1,000"
12400       = "12.4k"
101,800,000 = "102M" // !!!
1,849,000   = "1.85M"

それで、私は最大長5の文字列になりました。

私の範囲は0から199,999,999です。

多くの場合、つまり多くの間隔を処理せずにこれを行う方法はありますか?

4

2 に答える 2

2

手遅れかもしれませんが、必要に応じてフォーマットされた数値を返す拡張メソッドを次に示します。

public static string ToShortString(this int n)
{
    if (n >= 1e8)
    {
        return (Math.Round((double)n / 1e6, 0)).ToString() + "M";
    }
    else if (n >= 1e7)
    {
        return (Math.Round((double)n / 1e6, 1)).ToString() + "M";
    }
    else if (n >= 1e6)
    {
        return (Math.Round((double)n / 1e6, 2)).ToString() + "M";
    }
    else if (n >= 1e5)
    {
        return (Math.Round((double)n / 1e3, 0)).ToString() + "K";
    }
    else if (n >= 1e4)
    {
        return (Math.Round((double)n / 1e3, 1)).ToString() + "K";
    }
    else if (n >= 1e3)
    {
        return n.ToString("##,#");
    }
    else
    {
        return n.ToString();
    }
}

テスト:

Console.WriteLine((5).ToShortString());         // displays 5
Console.WriteLine((55).ToShortString());        // displays 55
Console.WriteLine((555).ToShortString());       // displays 555
Console.WriteLine((5555).ToShortString());      // displays 5,555
Console.WriteLine((55555).ToShortString());     // displays 55.6K
Console.WriteLine((555555).ToShortString());    // displays 556K
Console.WriteLine((5555555).ToShortString());   // displays 5.56M
Console.WriteLine((55555555).ToShortString());  // displays 55.6M
Console.WriteLine((555555555).ToShortString()); // displays 556M
于 2012-08-15T15:22:02.673 に答える
1

ここでのこの回答は、さまざまな方法でそれを行う方法を示しています。K接尾辞付きの丸め数値

残念ながら、少なくともかなりの数のケースがなければ、それを行う方法はわかりません。しかし、上記の質問の回答のいくつかは、それをかなりエレガントに、最小限のコードで実行します。

于 2012-08-15T14:35:44.290 に答える