web-dev-qa-db-ja.com

C#で何千ものスペースで区切る方法

1000ごとにスペースで区切るようにフォーマットする必要がある次の10進数があるとします。

 897.11 to 897.11
 1897.11 to 1 897.11
 12897.11 to 12 897.11
 123897.11 to 123 897.11

Decimal.ToString( "0 000.00")を試しました。番号が1897.11の場合、これはかなりうまく機能しますが。しかし、897.11の場合、0 897.11になります。

34

カスタム NumberFormatInfo をカスタム NumberGroupSeparatorプロパティ とともに渡し、 #,# format 番号グループを行うように指示します。この例では、不変カルチャの数値形式を基礎として使用しています。

var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
62
Tim S.

自分で文字を変更するカスタム数値フォーマットプロバイダーが必要です。

    static void Main(string[] args)
    {
        decimal d = 2000000;

        var f = new NumberFormatInfo {NumberGroupSeparator = " "};

        var s = d.ToString("n", f); // 2 000 000.00
    }

ここでは、数値としてフォーマットすることも指定しています("n")、他のフォーマットオプションについては、次のリンクを参照してください。

標準の数値フォーマット文字列

この場合、既に注意しているように、NumberFormatInfoには個別のプロパティがあるため、通貨またはパーセンテージとしてフォーマットすると機能しません。

現在のカルチャ形式情報は、System.Globalization.CultureInfo.CurrentCulture.NumberFormat

17

カスタムフォーマット文字列 を使用しますが、「0」ではなく「#」を使用します。0は必須のトークンです。番号がどれだけ長くても、ポンド記号(#)はオプションのトークンです実際に数字の数字にのみ使用されます。

  Decimal.ToString("# ###.00")  

注意。これはここに残しますが、@ Tim Sの答えの方が優れています。

これを試してみると、最初の区切り文字のみが生成されることがわかります...ここでは、区切り文字はコンマとピリオドに対してのみ機能すると思います。回避策として(予想される最大サイズ数まで)、代わりにこれを試してください。

  Decimal.ToString("# ### ### ### ###.00")  
6
Charles Bretana

これを試して

int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));

受け取ります:134 566 548,00

あなたの文化を忘れないでください。

6
Matthieu M

ノルウェー語のロケールでは、区切り文字としてスペースが使用されるため、ノルウェー人専用のWebサイトまたはアプリケーションを設計している場合は、次を使用できます。

(123897.11).ToString("n",new CultureInfo("nb-NO"))

結果として

"123 897,11"

明らかに、ノルウェー市場向けのアプリケーションを作成していない場合、これはばかげたソリューションになります。

1
Fiach Reid