Ich versuche, kämpfen, um eine Nummer zu einem bestimmten CultureInfo
zu normalisieren, seine Anwendung NumberFormat
Normalisieren eine Zeichenkette, die eine Dezimalzahl in bestimmten CultureInfo.NumberFormat enthält
Lassen Sie uns sagen, dass ich eine Zeichenfolge haben, die auch einige Zeichen enthält, so dass ich müssen es aufzuräumen:
var cleanedInput = Regex.Replace(userInput, @"[^0-9-,'.]+", "");
So bin ich im Grunde halten ,
'
und .
. Ich mache das, weil die CultureInfo
, die ,
und die .
unterschiedlich verwendet werden, um Dezimalzahlen zu trennen oder die Zahlen zu gruppieren.
, dass im Auge zu haben, wende ich die Decimal.TryParse
Methode, die NumberStyle
Angabe Dezimalstellen zu ermöglichen und die IFormatProvider
wird dinamically auf den gewünschten „local“ CultureInfo.NumberFormat
angewandt gehen werden.
decimal numericData;
if (!decimal.TryParse(cleanedInput, NumberStyles.AllowDecimalPoint, LocaleUser.NumberFormat, out numericData))
throw new Exception($"Error occurred. Could not parse:{cleanedInput} ");
Nehmen wir an, wir geben "hi9000,99hi"
ein. Sobald gereinigt, erhalten wir "9000,99"
. Nett. Also wenden wir das TryParse
an und es gibt Decimal
9000.99
zurück. Wichtiges Sprichwort, dass ich tatsächlich die es-ES
CultureInfo
anwende, die das ,
als Dezimaltrennzeichen hat. Ich erwarte grundsätzlich 9000,99
oder 9.000,99
.
Der Code hebt nicht die Exception
an, aber sieht so aus, als ob er nicht die CultureInfo
anwendet, die ich spezifizierte.
Was fehlt mir gerade? Ich habe das Gefühl, dass Decimal.TryParse
ein Schweizer Armeemesser ist, das ich gut handhabe.
Vielen Dank im Voraus.
Ich bin mir nicht sicher, was genau das Problem ist, aber denken Sie daran, dass eine Dezimalzahl kein Format ist _have_. Sie geben ein Format an, wenn _der Wert angezeigt wird. Wenn Sie ihn im Debugger betrachten, wird er die Kultur verwenden, auf die Ihr Computer eingestellt ist. Wenn Sie den Wert in einem bestimmten Format sehen wollen, verwenden Sie 'decimal.ToString' oder' string.Format'. –
Um zu verdeutlichen, erhebt der Code, den Sie bereitstellen, eine Ausnahme? Und "cleanedInput" ist das, was Sie erwarten, bevor Sie in den Parser gehen? –
Vielen Dank für Ihre Antwort. Der Code löst die Exception nicht aus, aber die Ausgabe, die ich erhalte, wendet definitiv nicht die von mir spezifizierte CultureInfo an und nicht einmal die CultureInfo, die VS2015 verwendet, wo sie debuggt wird. – Gonzo345