web-dev-qa-db-ja.com

C#(asp.net MVC3)でコンマと小数を使用して数値をフォーマットします

コンマと小数点で数字を表示する必要があります。

例:ケース1:10進数は432324です(これにはコンマまたは小数点はありません)432,324.として表示する必要があります
しかし432,324ではありません

ケース2:10進数は2222222.22(これにはコンマはありません)2,222,222.22として表示する必要があります

ToString("#,##0.##")を試しました。しかし、それはフォーマットしていません

37
Krishan
int number = 1234567890;
Convert.ToDecimal(number).ToString("#,##0.00");

結果1,234,567,890.00を取得します。

73
Roys

たぶん、次のように、単に標準フォーマット文字列"N"が必要な場合があります

number.ToString("N")

千の区切り文字と小数の固定数を使用します。 3桁ごとの区切り記号と小数点の記号は、使用する形式プロバイダー(通常はCultureInfo)に応じて異なり、小数点以下の桁数(通常は必要に応じて2倍になります)も異なります。

フォーマットプロバイダーが異なる小数点以下の桁数を指定し、フォーマットプロバイダーを変更したくない場合は、.ToString("N2")のように、Nの後に小数点以下の桁数を指定できます。

編集:コンマ間のグループのサイズは、

CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes

特別な形式のプロバイダーを指定しない場合。

26

で試す

ToString("#,##0.00")

MSDNから

*「0」カスタム書式指定子は、ゼロプレースホルダー記号として機能します。フォーマットされている値のフォーマット文字列でゼロが現れる位置に数字がある場合、その数字は結果文字列にコピーされます。そうでない場合、結果文字列にゼロが表示されます。小数点の前の左端のゼロと小数点の後の右端のゼロの位置は、結果文字列に常に存在する数字の範囲を決定します。

「00」指定子を使用すると、値は小数点の前の最も近い桁に丸められ、常にゼロからの丸めが使用されます。たとえば、「00」で34.5をフォーマットすると、値は35. *になります

9
Patrick D'Souza

同じ問題がありました。私は、スプレッドシートの「一般」形式のような数字をフォーマットしたかった。言い換えると:

1234.56 => 1,234.56

1234 => 1,234

小数点以下の最大桁数をサポートする必要がありますが、不要な場合は末尾のゼロやドットを入れないでください。もちろん、文化にやさしい必要があります。 String.Format だけを使用してそれを行うためのきれいな方法を実際に考えたことはありませんが、String.Formatと Regex.Replace のいくつかを組み合わせて NumberFormatInfo.CurrentInfo のカルチャヘルプが仕事をしました(LinqPad C#プログラム)。

string FormatNumber<T>(T number, int maxDecimals = 4) {
    return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number),
                         @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", "");
}   

void Main(){
    foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 } )
        Console.WriteLine(test + " = " + FormatNumber(test));
}

生産物:

123 = 123
1234 = 1,234
1234.56 = 1,234.56
123456.789 = 123,456.789
1234.56789123 = 1,234.5679
8
Wade Hatler

Razor Viewの場合:

[email protected]("{0:#,0.00}",item.TotalAmount)
8
JoshYates1980
CultureInfo us = new CultureInfo("en-US");
TotalAmount.ToString("N", us)
6
DarkoM

必要なのは「#、0.00」だけで、残りはc#が行います。

Num.ToString( "#、0.00" ")

  • 「#、0」は千の区切り文字をフォーマットします
  • 「0.00」は小数点以下2桁を強制します
3
Matt Welson

あなたの質問はあまり明確ではありませんが、これはあなたがやろうとしていることを達成するはずです:

decimal numericValue = 3494309432324.00m;
string formatted = numericValue.ToString("#,##0.00");

formattedには次が含まれます。,494,309,432,324.

3
Belogix

で試す

ToString("#,##0.###")

生産物:

1234.55678 => 1,234.556

1234 => 1,234

3

文字列変数を使用している場合は、:を使用して文字列を直接フォーマットしてから、フォーマット(N0、P2など)を指定できます。

decimal Number = 2000.55512016465m;
$"{Number:N}" #Outputs 2,000.55512016465

次のように末尾に数字を追加して、表示する小数点以下の桁数を指定することもできます

$"{Number:N1}" #Outputs 2,000.5
$"{Number:N2}" #Outputs 2,000.55
$"{Number:N3}" #Outputs 2,000.555
$"{Number:N4}" #Outputs 2,000.5551
0
Suit Boy Apps
string Mynewcurrency = DisplayIndianCurrency("7743450.00");
        private string DisplayIndianCurrency(string EXruppesformate) 
        { 
        string fare = EXruppesformate;
        decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture);
        CultureInfo hindi = new CultureInfo("en-IN");
     // string text = string.Format(hindi, "{0:c}", parsed);if you want <b>Rs 77,43,450.00</b>
    string text = string.Format(hindi, "{0:N}", parsed); //if you want <b>77,43,450.00</b>
      return ruppesformate = text;
    }
0
Sagar Mahajan