it-swarm.com.de

Konvertieren Sie die Zeichenfolge mit dem Format in eine Dezimalzahl

Ich muss einen String in C # in eine Dezimalzahl konvertieren, aber dieser String hat verschiedene Formate.

Zum Beispiel:

"50085"

"500,85"

"500,85"

Dies sollte für 500,85 in Dezimal umgerechnet werden. Gibt es eine vereinfachte Form, um diese Konvertierung im Format durchzuführen?

Während decimal.Parse () die Methode ist, nach der Sie suchen, müssen Sie ein bisschen mehr Informationen dazu bereitstellen. Es wird nicht automatisch zwischen den drei von Ihnen angegebenen Formaten ausgewählt, sondern Sie müssen angeben, welches Format Sie erwarten (in Form eines IFormatProviders). Beachten Sie, dass ich selbst mit einem IFormatProvider nicht glaube, dass "50085" richtig eingezogen wird.

Ich sehe nur, dass aus Ihren Beispielen hervorgeht, dass Sie immer zwei Dezimalstellen für die Genauigkeit erwarten. In diesem Fall können Sie alle Punkte und Kommas entfernen und durch 100 teilen.

Vielleicht so etwas wie:

public decimal? CustomParse(string incomingValue)
{
    decimal val;
    if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
        return null;
    return val / 100;
}
15
Chris Shaffer

Einige Kulturen verwenden ein Komma, um den Gleitkommawert anzugeben. Sie können dies mit dem folgenden Code auf einer Aspx-Seite testen:

var x = decimal.Parse("500,85");
Response.Write(x + (decimal)0.15);

Dies gibt die Antwort 501, wenn die Thread-Kultur auf eine Kultur gesetzt wurde, die das Komma als Gleitkomma verwendet. Sie können dies folgendermaßen erzwingen:

var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," });
15
James McCormack

Dies funktioniert abhängig von Ihren Kultureinstellungen:

string s = "500.85";
decimal d = decimal.Parse(s);

Wenn Ihre Kultur nicht standardmäßig , anstelle von . als Dezimalpunkt zulässt, müssen Sie wahrscheinlich Folgendes tun:

s = s.Replace(',','.');

Es muss jedoch nach mehreren .s gesucht werden ... dies scheint sich eher auf ein Problem der Eingabebereinigung zu beschränken. Wenn Sie in der Lage sind, die Eingabe zu validieren und zu bereinigen, damit alle Regeln eingehalten werden, ist die Konvertierung in eine Dezimalzahl viel einfacher.

6
Jaymz

Versuchen Sie diesen Code unten:

string numValue = "500,85";
System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR");
decimal decValue;
bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue);
if (decValid)
{
    lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat);
}

Da ich einen Wert von 500,85 gebe, gehe ich davon aus, dass die Kultur französisch ist und daher das Dezimaltrennzeichen "," ist. Dann decimal.TryParse (numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); Gibt den Wert als 500,85 in decValue zurück. In ähnlicher Weise ändern Sie den culInfo-Konstruktor, wenn der Benutzer Englisch (USA) ist.

3
Nisha_Roy

Es gibt zahlreiche Möglichkeiten:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test;Double.TryParse("232.23", out test)

Stellen Sie sicher, dass Sie versuchen und fangen ...

1

Dies ist eine neue Funktion namens Zifferngruppierungssymbol .

Schritte:

  1. Öffnen Sie Region und Sprache in der Systemsteuerung
  2. Klicken Sie auf Zusätzliche Einstellung
  3. Auf der Registerkarte Zahlen
  4. Stellen Sie Zifferngruppierungssymbol als benutzerdefinierte Einstellung ein. Komma ändern; Ersetzen durch (beliebiges Zeichen von A bis Z oder {/,}). Zifferngruppierungssymbol = e;

Beispiel:

string checkFormate = "123e123";
decimal outPut = 0.0M;
decimal.TryParse(checkFormate, out outPut);
Ans: outPut=123123;
1
Mohd Vasil

Versuche dies

 public decimal AutoParse(string value)
    {
        if (Convert.ToDecimal("3.3") == ((decimal)3.3))
        {
            return Convert.ToDecimal(value.Replace(",", "."));
        }
        else
        {
            return Convert.ToDecimal(value.Replace(".", ","));
        }

    }
0
halo89