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になります。
カスタム NumberFormatInfo
をカスタム NumberGroupSeparator
プロパティ とともに渡し、 #,#
format 番号グループを行うように指示します。この例では、不変カルチャの数値形式を基礎として使用しています。
var nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
nfi.NumberGroupSeparator = " ";
string formatted = 1234897.11m.ToString("#,0.00", nfi); // "1 234 897.11"
自分で文字を変更するカスタム数値フォーマットプロバイダーが必要です。
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
。
カスタムフォーマット文字列 を使用しますが、「0」ではなく「#」を使用します。0は必須のトークンです。番号がどれだけ長くても、ポンド記号(#)はオプションのトークンです実際に数字の数字にのみ使用されます。
Decimal.ToString("# ###.00")
注意。これはここに残しますが、@ Tim Sの答えの方が優れています。
これを試してみると、最初の区切り文字のみが生成されることがわかります...ここでは、区切り文字はコンマとピリオドに対してのみ機能すると思います。回避策として(予想される最大サイズ数まで)、代わりにこれを試してください。
Decimal.ToString("# ### ### ### ###.00")
これを試して
int testNumber = 134566548;
Console.WriteLine(string.Format("{0:N}", testNumber));
受け取ります:134 566 548,00
あなたの文化を忘れないでください。
ノルウェー語のロケールでは、区切り文字としてスペースが使用されるため、ノルウェー人専用のWebサイトまたはアプリケーションを設計している場合は、次を使用できます。
(123897.11).ToString("n",new CultureInfo("nb-NO"))
結果として
"123 897,11"
明らかに、ノルウェー市場向けのアプリケーションを作成していない場合、これはばかげたソリューションになります。