Benutzer mit den meisten Antworten
mit Werten aus einem Stringarray rechen können

Frage
-
Hallo Leute,
ich beabsichtige, mit Werten aus einem Stringarray zu rechnen. Mein Versuch,die entsprechenden Werte in ein integer umzuwandeln, mißlingt jedoch. Wie mache ich es richtig?
System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."
using System; namespace IHK_Rabatt { class Program { static void Main(string[] args) { /* Dictionary<string, double> Produkte = new Dictionary<string, double>() { { "A", 2.0}, { "B", 2.5}, { "C", 7.0}, { "D", 6.0}, { "E", 5.0}, };*/ string[,] rabattliste = new string[5, 2] { { "A", "2.0" }, { "B","2.5" }, { "C","7.0"} ,{"D","6.0"},{"E","5.0"} }; string[,] artikel = new string[5, 5] {{ "1", "Dünger","A","7.80","2" }, { "2", "Garteneinfassung","B","94.86","20" }, {"3", "Rosen","C","56.00","3"} ,{"4", "Werkzeugset","D","87.50","1"},{"5", "Fliesen","B","40.00","5"} }; int anzahl = artikel.Length; for (int i = 0; i < artikel.GetLength(0); i++) { for (int j = 0; j< artikel.GetLength(1); j++) { if (j==4) Console.WriteLine(artikel[i, j]+","); else Console.Write(artikel[i, j]+","); } } Console.WriteLine(artikel[4, 3]);//gibt 40.00 aus int c = (Convert.ToInt32(artikel[4, 3])*4);//wirft die Exception aus Console.ReadLine(); } } }
- Bearbeitet tklustig Montag, 1. Januar 2018 16:32
Antworten
-
Hallo
Mein Versuch,die entsprechenden Werte in ein integer umzuwandeln, mißlingt jedoch. Wie mache ich es richtig?
System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."
Console.WriteLine(artikel[4, 3]);//gibt 40.00 aus int c = (Convert.ToInt32(artikel[4, 3])*4);//wirft die Exception aus
Ein "int" hat keine Dezimalstellen und deshalb hat ein gültiger "Int-String" auch keinen Dezimalpunkt. Willst du die Konversion dennoch mit Dezimalpunkten füttern, musst du die Form des Dezimaltrenners kennen. Für Deutschland ist das z.B. ein Komma, in den USA ein Punkt. Mit int.TryParse geht das so:
if ( int.TryParse( "40.00", NumberStyles.AllowDecimalPoint, new NumberFormatInfo() { NumberDecimalSeparator = "." }, out int x) ) { Console.WriteLine($"Betrag in int verwandelt: {x}"); }
Natürlich ist "int" hier aber auch nicht der richtige Zieltyp. Du hast im zweiten Beispiel "float" gewählt, ich würde dir aber "decimal" empfehlen.
Darfst du keine Klassen und Listen verwenden? Oder weshalb versuchst du das mit Arrays?
Gruß
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 5. Januar 2018 07:40
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 16. Januar 2018 06:22
Alle Antworten
-
Ich mache es jetzt so:
float c; bool result = float.TryParse(artikel[3,3], out c); if (result) { Console.WriteLine(c/100*4); }
So sieht das Gesamtkonzept aus(ein Lösungsvorschlag für eine IHK-Abschlussprüfung aus dem Jahre 2013/14)
using System; namespace IHK_Rabatt { class Program { static void Main(string[] args) { /* Dictionary<string, double> Produkte = new Dictionary<string, double>() { { "A", 2.0}, { "B", 2.5}, { "C", 7.0}, { "D", 6.0}, { "E", 5.0}, };*/ string[,] rabattliste = new string[5, 2] { { "A", "2.0" }, { "B","2.5" }, { "C","7.0"} ,{"D","6.0"},{"E","5.0"} }; string[,] artikel = new string[5, 5] {{ "1", "Dünger","A","7.80","2" }, { "2", "Garteneinfassung","B","94.86","20" }, {"3", "Rosen","C","56.00","3"} ,{"4", "Werkzeugset","D","87.50","1"},{"5", "Fliesen","B","40.00","5"} }; /* for (int i = 0; i < artikel.GetLength(0); i++) { for (int j = 0; j< artikel.GetLength(1); j++) { if (j==4) Console.WriteLine(artikel[1, j]+","); else Console.Write(artikel[i, j]+","); } } */ float rabatsatz; float VKP; float menge; float rabatt = 0; for (int i = 0; i < artikel.GetLength(0); i++) { if (artikel[i, 2] == rabattliste[i, 0]) { bool result0 = float.TryParse(artikel[i, 3], out VKP); bool result1 = float.TryParse(rabattliste[i, 1], out rabatsatz); bool result2 = float.TryParse(artikel[i, 4], out menge); if (result0 && result1 && result2) { /*Console.WriteLine("Rabatsatz in Prozent:" + rabatsatz / 10); Console.WriteLine("Listenprreis in Euro:" + VKP / 100); Console.WriteLine("Menge in Stück:" + menge);*/ rabatt += ((rabatsatz / 10) * (VKP / 100) / 100) * (menge); } } } Console.WriteLine("Der gewährte Gesamtrabatt beträgt:" + rabatt + " EURO"); Console.ReadLine(); } } }
- Bearbeitet tklustig Montag, 1. Januar 2018 17:40
-
Hallo
Mein Versuch,die entsprechenden Werte in ein integer umzuwandeln, mißlingt jedoch. Wie mache ich es richtig?
System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."
Console.WriteLine(artikel[4, 3]);//gibt 40.00 aus int c = (Convert.ToInt32(artikel[4, 3])*4);//wirft die Exception aus
Ein "int" hat keine Dezimalstellen und deshalb hat ein gültiger "Int-String" auch keinen Dezimalpunkt. Willst du die Konversion dennoch mit Dezimalpunkten füttern, musst du die Form des Dezimaltrenners kennen. Für Deutschland ist das z.B. ein Komma, in den USA ein Punkt. Mit int.TryParse geht das so:
if ( int.TryParse( "40.00", NumberStyles.AllowDecimalPoint, new NumberFormatInfo() { NumberDecimalSeparator = "." }, out int x) ) { Console.WriteLine($"Betrag in int verwandelt: {x}"); }
Natürlich ist "int" hier aber auch nicht der richtige Zieltyp. Du hast im zweiten Beispiel "float" gewählt, ich würde dir aber "decimal" empfehlen.
Darfst du keine Klassen und Listen verwenden? Oder weshalb versuchst du das mit Arrays?
Gruß
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Freitag, 5. Januar 2018 07:40
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 16. Januar 2018 06:22