web-dev-qa-db-ja.com

通貨のような二重値をフォーマットしますが、通貨記号は付けません(C#)

テキストボックスに、次のようにフォーマットする必要がある残高を示す文字列値を入力します。

###,###,###,##0.00

Value.ToString( "c")を使用できますが、これにより通貨記号がその前に配置されます。

上記のフォーマットを実現するために、テキストボックスにデータを入力する前に、文字列をどのように操作するか考えていますか?

私はこれを試しましたが、成功しませんでした:

String.Format("###,###,###,##0.00", currentBalance);

どうもありがとう、

48
Houman
string forDisplay = currentBalance.ToString("N2");
55
LukeH

通貨の書式設定で希望どおりの結果が得られる場合は、NumberFormatInfoのクローンを作成し、CurrencySymbolプロパティを ""に設定します。もちろん、あなたが望むように負の数を処理することを確認する必要があります。

例えば:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
        nfi = (NumberFormatInfo) nfi.Clone();

        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        nfi.CurrencySymbol = "";
        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
    }
}

他のオプションは、もちろんカスタム数値形式の文字列を使用することです-それは本当に通貨の見た目を、シンボルなしで正確にミラーリングするか、数字の正確な位置を制御するかによって異なります。

64
Jon Skeet

やってみました:

currentBalance.ToString("#,##0.00");

これは、次のものの長文版です。

currentBalance.ToString("N2");
10
Garry Shutler

string result = string.Format( "{0:N2}"、value); // ### ### ##。##のような結果の場合

5
webKite

これを行うには、次のように グループ区切り記号 および セクション区切り記号 を使用します。

currentBalance.ToString("#,0.00;(#,0.00)");

これは@JonSkeetからの回答のような文化の違いを考慮していませんが、これはen-USの文化通貨形式が単一のカスタム形式文字列を使用して生成する小数点以下の桁数、丸め、千の区切り、負の数の処理を模倣します。

。NET Fiddle Demo

3
Jordan Parker
CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";

Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45
2
Prasanna

このシンプルなソリューションは、米国通貨で動作します。

国際通貨サポートが不要な場合は、これを使用して、$を削除する通貨記号に置き換えます。

// for USD
string result = currentBalance.ToString("C").Replace("$", "")

または

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
0
Taylor Brown

これはやり過ぎかもしれませんが、ラウンド、フォーマット...

@helper TwoDecimalPlaces(decimal? val)
{
    decimal x = 0;
    decimal y = 0;
    string clas = "text-danger";
    if (val.HasValue)
    {
        x = (decimal)val;
        if (val > 0)
        {
            clas = "";
        }
    }
    y = System.Math.Round(x, 2);
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
    <span class="@clas">@string.Format("{0:N2}", y)</span>
}
0
HerGiz