4 Stimmen

String in Dezimalzahlen umwandeln, wobei das genaue Eingabeformat beibehalten wird

Ich bin mir sicher, dass dies ein Kinderspiel ist, aber ich habe wirklich Probleme mit etwas, das trivial erscheint.

Ich brauche, um den eingegebenen Text eines Textfeldes auf dem Formular zu überprüfen und zu sehen, wenn es innerhalb eines gewünschten Bereichs ist (ich habe versucht, einen Bereich Validator, aber es funktioniert nicht aus irgendeinem Grund, so dass ich versuche, dies Server-seitig zu tun).

Was ich tun möchte, ist:

Ermitteln Sie den eingegebenen Wert (z. B. 0,02), ersetzen Sie die Kommas und Punkte, wandeln Sie ihn in eine Dezimalzahl um (oder in eine Potenz oder ein Äquivalent) und prüfen Sie, ob er zwischen 0,10 und 35000,00 liegt.

Hier ist, was ich bis jetzt habe:

string s = txtTransactionValue.Text.Replace(",", string.Empty).Replace(".", string.Empty);
        decimal transactionValue = Decimal.Parse(s);
        if (transactionValue >= 0.10M && transactionValue <= 35000.00M) // do something

Wenn ich 0,02 in die oben genannten übergeben, transactionValue ist 2. Ich möchte den Wert als 0,02 behalten (dh tun keine Formatänderungen zu ihm - 100,00 ist 100,00, 999,99 ist 999,99)

Irgendwelche Ideen?

Vielen Dank im Voraus, Brett

3voto

Femaref Punkte 59547

Sie ersetzen alle Vorkommen von "." oder "," durch String.Empty, was zu einer Zeichenfolge ohne Trennzeichen führt. Besser verwenden decimal.Parse() o decimal.TryParse() mit geeigneten CultureInfo und NumberStyles.

2voto

ChrisF Punkte 130622

Sie ersetzen "." durch nichts, sodass Ihre Eingabe von "0,02" zu "002" wechselt, was als 2,0 geparst wird.

Warum ersetzen Sie die Kommas und Punkte (Dezimalpunkte)?

2voto

Oliver Punkte 41055

Wie die anderen bereits erwähnt haben, lassen Sie die Punkte und Kommas weg. Vielleicht tun Sie das, weil Sie je nach Sprache des Benutzers Probleme haben, denn in verschiedenen Kulturen haben Punkt und Komma eine andere Bedeutung.

Wenn Sie also die Sprache des Benutzers kennen, können Sie eine von ihnen ausprobieren:

decimal value = Decimal.Parse("0.02", CultureInfo.GetCultureInfo("en-US"));
decimal value = Decimal.Parse("0,02", CultureInfo.GetCultureInfo("de-DE"));

0voto

bruno Punkte 1820

Sie ersetzen den "Punkt". Das bedeutet, dass "0,02" zu "002" wird, was wie "2" geparst wird.

Ersetzen Sie nur nicht den "Punkt". Und ich denke, dass die Ersetzung des Kommas auch nicht notwendig ist.

0voto

ppolyzos Punkte 6526

Sie können auch eine einfache Methode zur Berücksichtigung von CultureInfo und NumberStyles erstellen, die Sie wünschen. Hier ist mein Vorschlag:

 public decimal ParseDecimal(string input)
{
    CultureInfo cultureInfo = null;
    NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
    decimal value = 0;
    string[] userLanguages = HttpContext.Current.Request.UserLanguages;
    if (userLanguages.Length > 0)
    {
        cultureInfo = new CultureInfo(userLanguages[0]);
        Decimal.TryParse(input, style, cultureInfo, out value);
    }

    return value;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X