Laden...

string nach decimal Konvertierung, wobei der String nicht nur die Zahl enthält

Erstellt von solidrain vor 12 Jahren Letzter Beitrag vor 12 Jahren 995 Views
S
solidrain Themenstarter:in
8 Beiträge seit 2011
vor 12 Jahren
string nach decimal Konvertierung, wobei der String nicht nur die Zahl enthält

Hallo,
ich habe ein Problem bei einer Konvertierung eines Typen und es wäre nett, wenn mir jemand vielleicht hierbei helfen könnte.

Was ich bereits habe ist eine Konvertierung von decimal nach string. Das ist alles kein Problem. Die Umwandlung ist realisiert mittels:

var number = 1.5;
var _displayFormat = "test123 0:0.##";
var culture = Thread.CurrentThread.CurrentUICulture;

var result = number.ToString(this._displayFormat, this._culture);

Das Problem liegt bei der Konvertierung von dem vorher erzeugten string in result. Wie kann ich diesen in einen decimal parsen. Das Format, wie dieser string aussieht, ist ja in this._displayFormat vorhanden.

Einziger mir bis jetzt möglich erscheinender Ansatz ist, alles aus dem string result zu entfernen was keine Zahl oder Komma ist und dann zu parsen. Problem hierbei ist, dass vorangestellter Text Zahlen, Striche, Punkte, Kommas, ... enthalten kann. Erschwerend kommt hinzu, dass die Variable this._displayFormat nicht statisch ist, sondern alles enthalten kann, was auch bei decimal.ToString(string format, CultureInfo culture) möglich ist.

Gruss Flo

G
538 Beiträge seit 2008
vor 12 Jahren

Hallo und Willkommen,

anstatt hin und her zu konvertieren könntest du dafür sorgen, dass du entweder nur die Zahl konvertieren musst (indem ein entsprechendes Eingabefeld so gestaltet ist) oder du speicherst einfach Number in irgendeiner Variable ab, dann fällt das Konvertieren ganz weg.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

T
574 Beiträge seit 2008
vor 12 Jahren
decimal value = 1.23;
string culture = "de-AT";
string displayFormat = "Betrag = {0:C}";

string result = String.Format(System.Globalization.CultureInfo.GetCultureInfo(culture), displayFormat, value);

culture="de-AT"; displayFormat="Betrag = {0:C}"
ergibt: "Betrag = € 1,23"

culture="en-US"; displayFormat="Betrag = {0:C}"
ergibt: "Betrag = $ 1.23"

culture="de-AT"; displayFormat="2 Stellen {0:0.00}"
ergibt: "2 Stellen 1,23"

culture="en-US"; displayFormat="2 Stellen {0:0.00}"
ergibt: "2 Stellen 1.23"

S
solidrain Themenstarter:in
8 Beiträge seit 2011
vor 12 Jahren

@tkrasinger: Erst einmal Danke für den Code. Leider habe ich diese Richtung schon. Man hätte wohl im Beispiel-Code das var result als string result schreiben sollen. Also nicht von string nach decimal, sondern von einem string nach decimal, wobei der string anhand eines bestimmten Formats mit decimal.ToString() erzeugt wurde.

Gruss Flo

G
538 Beiträge seit 2008
vor 12 Jahren

Vielleicht erklärst du mal bissl was du da tust, denn ich vermute nach wie vor, dass dein Ansatz schon - zweifelhaft ist.

Hast du dort eine DLL, WindowsForms-Anwendung oder ASP.NET?
Warum willst du zurückkonvertieren mit diesem Format?
Gibt dein Benutzer es so ein?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
solidrain Themenstarter:in
8 Beiträge seit 2011
vor 12 Jahren

Es wird eine unverselle TextBox, bei der der Entwickler das Anzeige-Format angeben kann. Das Anzeige-Format wird benutzt, wenn sich die TextBox nicht im Edit-Modus befindet. Wenn sie sich jedoch im Edit-Modus befindet, so kann der Entwickler entweder einen decimal-Wert oder den string im Anzeigen-Format darstellen lassen. Alles möglich, jedoch gibt es ein Problem, wenn

  1. Anzeige-Format ungleich decimal default
  2. Darstellung von formatiertem string im Edit-Modus

Und zwar im Speziellen, wenn ein Benutzer nun Werte eingibt und man nun versucht eine Validierung auf den Inhalt der Textbox zu machen. Deswegen möchte ich für die Validerung einen decimal.TryParse() machen.

G
538 Beiträge seit 2008
vor 12 Jahren

Okay... nun verstehe ich

du könntest versuchen aus dem DisplayString einen Regex zu basteln bei dem du das Format Teil (also {0:0.##}) durch (.*) ersetzt, dann kannst du aus den Regex Matches den passenden Match extrahieren und parsen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)