Laden...

[Gelöst] String aufteilen, Ziffern konvertieren und Werte ersetzen

Erstellt von csharpente vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.464 Views
C
csharpente Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren
[Gelöst] String aufteilen, Ziffern konvertieren und Werte ersetzen

Beschreibung:

Guten Abend,
ich bin wie viele andere auch ein Neuling und seit einiger Zeit dabei einen Code zu schreiben in dem eine Artikelnummer "Beispiel:55141159007955" in verschiedene Strings zu teilen und durch andere Werte zu ersetzen bzw. andere Ziffern zu konvertieren.
Die ersten vier Ziffern sind irrelevant, da diese nur abgeglichen und ersetzt werden (Was bereits funktioniert), die Ziffern 5-8 und 9-12 sind Werte für den Aussendurchmesser und Innendurchmesser. Diese sollen aber nicht wie im Beispiel "1159" und "0079", sondern "11,59" und "0,79" ausgegeben werden, bzw. andere als"22,25" und "1,89".

Und nun zu meinem Problem.
Leider habe ich bisher keine Möglichkeit gefunden an der 3. Position von hinten ein Komma zu setzen und ggf. eine Null vor dem Komma, da die Nullen beim Convert verloren gehen.
Alle Werte werden an ein label ausgegeben und stellen Millimeter-Werte da.



            String ArtikelAD = tbxartikel.Text;
            int startIndexAD = 4;
            int lengthAD = 4;
            String substringAD = ArtikelAD.Substring(startIndexAD, lengthAD);

            double AD;
            AD = Convert.ToDouble(substringAD);
            tbxad.Text = "" + AD;
            String ArtikelID = tbxartikel.Text;
            
            int startIndexID = 8;
            int lengthID = 4;
            String substringID = ArtikelID.Substring(startIndexID, lengthID);
            double ID;
            ID = Convert.ToDouble(substringID);
            tbxid.Text = "" + ID;

            double wert;
            wert = AD - ID;
            tbxws.Text = "" + wert /2;

Schlagwörter: <Bitte Schlagwörter, unter denen dein Snippet über die Suche gefunden werden soll, hier eintragen>

Kann mir jemand behilflich sein?

Was man nicht weiß, kann man erlernen!

P
441 Beiträge seit 2014
vor 5 Jahren

Hi,

wenn du den Wert bereits als double hast, kannst du ihn einfach teilen. Das was du da hast ist ein Fix-Komma-Wert, also ein Wert der an einer bestimmten Stelle ein Komma hat, das aber nur per Definition dort ist:

1159.0 / 100 = 11.59

Was du auf jeden Fall beachten solltest ist, dass du ggf. einmal andere Werte als die erwartenden Zahlen in deinen Algorithmus bekommst, das solltest du abfangen (Was z.B., wenn dir jemand keine Zahlen sondern Buchstaben gibt).
Dafür bietet sich die Methode double.TryParse an.

P.S.: Wenn du die Wahl hast, ich würde keine Daten in die Nummern hineinkodieren, sondern diese separat in einer Datenbank pflegen. Spätestens, wenn sich mal etwas ändert musst du dann dein System nicht anpassen und weitere Parser erstellen.

C
csharpente Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Ach Gott,
manchmal ist es einfach zu simpel.

Hat natürlich auf anhieb geklappt. Danke sehr!!

Das einzige was aber noch stört ist, dass wenn ich folgende Nummer habe:
"44881905159055"

Dabei wird aus 1590 ->> 15,9 kann man es noch bewerkstelligen, dass die Null hinter dem 15,9 stehen bleibt?

Die Idee mit der Datenbank ist mit sicherheit vorteilhaft, aber im Moment noch nicht zu bewerkstelligen.
Das wird aber noch kommen.

Was man nicht weiß, kann man erlernen!

16.806 Beiträge seit 2008
vor 5 Jahren

Dabei wird aus 1590 ->> 15,9 kann man es noch bewerkstelligen, dass die Null hinter dem 15,9 stehen bleibt?

Einfacher, schneller Blick in die Doku: Benutzerdefinierte Zahlenformatzeichenfolgen

C
csharpente Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Danke sehr,
hab es mit dem Link direkt gelöst bekommen.

Für alle die es interessiert, es fehlte die passende Formatierung.

String.Format("{0:0.00}", Deine Zahl/ Dein Wert).Replace(".", ",");

Das Replace bedeutet, das die Punkte durch komma ersetzt werden.

Was man nicht weiß, kann man erlernen!

16.806 Beiträge seit 2008
vor 5 Jahren

Der Replace ist Käse. Schau dir die Culture Info an - dafür ist sie da.
Wird auch im Link erklärt.