web-dev-qa-db-de.com

Formatieren Sie einen doppelten Wert wie Währung, jedoch ohne das Währungszeichen (C #).

Ich füge einem Textfeld einen String-Wert hinzu, der mir einen Kontostand anzeigt, der folgendermaßen formatiert werden muss:

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

Ich könnte den value.ToString ("c") verwenden, aber dies würde das Währungszeichen davor setzen.

Irgendeine Idee, wie ich die Zeichenfolge vor dem Zuführen des Textfelds manipulieren würde, um die obige Formatierung zu erreichen?

Ich habe es versucht, ohne Erfolg: 

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

Danke vielmals,

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

Wenn die Währungsformatierung genau das ergibt, was Sie möchten, klonen Sie eine NumberFormatInfo mit und setzen Sie die CurrencySymbol-Eigenschaft auf "". Sie sollten natürlich prüfen, ob negative Zahlen in der gewünschten Weise behandelt werden.

Zum Beispiel:

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));
    }
}

Die andere Option ist natürlich die Verwendung eines benutzerdefinierten numerischen Formatstrings - es hängt davon ab, ob Sie genau spiegeln möchten, wie eine Währung aussehen würde, nur ohne das Symbol oder die genaue Positionierung von Ziffern.

61
Jon Skeet

Hast du es versucht:

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

Dies ist das Langzeitäquivalent von:

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

string result = string.Format ("{0: N2}", Wert); // Für ein Ergebnis wie ### ### ##. ##

5
webKite

Sie können dies mit dem Gruppentrenner und dem Abschnittstrenner wie folgt tun:

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

Dies berücksichtigt keine Kulturabweichungen, wie die Antwort von @JonSkeet dies tun würde, aber dies simuliert Dezimalstellen, Rundungen, Tausendertrennungen und negative Zahlen, die das en-US-Kulturwährungsformat mit einer einzigen benutzerdefinierten Formatzeichenfolge erzeugt.

.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

Diese einfache Lösung funktioniert für mich mit US-Währung. 

Wenn Sie keine internationale Währungsunterstützung benötigen, verwenden Sie diese Option und ersetzen Sie das $ durch das zu entfernende Währungssymbol:

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

oder 

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

Das kann übertrieben sein, aber es rundet, Formate ...

@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