Laden...

Ergebnis wird falsch berechnet

Erstellt von Maddin_404 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.476 Views
M
Maddin_404 Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren
Ergebnis wird falsch berechnet

Hallo, ich habe erst neu mit programmieren angefangen und bin noch viel am probieren und komme momentan nicht weiter und hoffe das vlt jemand eine Lösung für mein Problem hat.

Mein Code sieht wie folgt aus;



            int Aroma = 0;

            int Grundwert =0;

            int mengeAroma =0;

            int mengeBase =0;



            Console.WriteLine("Gesammte Liquidmenge?");

            Grundwert = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Wieviel % Armoa soll begemischt werden?");

            Aroma = Convert.ToInt32(Console.ReadLine());



          



            Console.WriteLine(mengeAroma = Grundwert  / 100 * Aroma );

            Console.ReadLine();

          

          



            Console.WriteLine(mengeBase = Grundwert - mengeAroma );

            Console.ReadLine();


Mein Problem ist das nach der Eingabe des Aroma Anteils, eig das Ergebnis von Grundwert / 100 * Aroma kommen sollte, stattdessen spuckt er nach der Eingabe einfach nur meine Eingabe ohne Berechnung aus.

Wenn ich es als double probiere klappt es mit der rechnung. nur das er mir jetzt sagt das

Console.WriteLine(mengeAroma = (Grundwert/100* Aroma));

        mengeAroma = Convert.ToDouble(Console.ReadLine());  

das falsche format hat..



double Aroma = 0;

           double Grundwert =0;

            double mengeAroma =0;

            double mengeBase =0;



            Console.WriteLine("Gesammte Liquidmenge?");

            Grundwert = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Wieviel % Aroma soll begemischt werden?");

            Aroma = Convert.ToDouble(Console.ReadLine());



           



            Console.WriteLine(mengeAroma = (Grundwert/100* Aroma));

            mengeAroma = Convert.ToDouble(Console.ReadLine());



           

           



          Console.WriteLine(mengeBase = (Grundwert - mengeAroma) );

            mengeBase = Convert.ToDouble(Console.ReadLine());


16.807 Beiträge seit 2008
vor 5 Jahren

Bitte verwende Code Tags
[Hinweis] Wie poste ich richtig?
Keiner hier hat Lust Plain-Text Code zu lesen.

Besten Dank!

16.807 Beiträge seit 2008
vor 5 Jahren
  1. In Programmiersprachen muss man immer durch ein Double teilen, wenn man keine Rundungsfehler haben will. Bei Int geht logischerweise immer was verloren.
mengeAroma = Grundwert  / 100.0 * Aroma
  1. In einer WriteLine-Operation einen Wert zu deklarieren ist so ziemlich das unübersichtlichste, was man tun kann
  2. Dann gib ihm halt ein Double-Wenn Du mit Double-Werten arbeiten willst...? 🤔
    Da Du aber verheimlichst, was Du eingibst, was ein Fehler wirft, bleibt uns nur der Blick in die Glaskugel 😉
  3. ich sehe keine Code-Stelle, die die Eingabe ausspuckt. Daher kann ich diese Aussage nicht nachvollziehen.
M
Maddin_404 Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren

Ich habe das ganze nur von einem Währungsrechner Beispiel abgeleitet deswegen in WriteLine 😕

Noch bin ich bei einer ganz einfacher Konsolen Anwendung die wie folgt aufgebaut ist,

Ich werde aufgefordert die gewünschte menge fertiges Liquid einzugeben
( und bestimme damit meinen Grundwert)
Dann werde ich aufgefordert die menge an aroma in % anzugeben

dann sollte der Grundwert / 100 * Aroma ausgerechnet werden was mittlerweile auch funktioniert

nur beim letzten schritt wo das Ergebnis von dieser Rechnung dem Grundwert abgezogen werden soll erscheint der fehler "Die Eingabezeichenfolge hat das falsche Format." in dem abschnitt mengeAroma = Convert.ToDouble(Console.ReadLine());

709 Beiträge seit 2008
vor 5 Jahren

Was tippst du denn vorher in die Konsole ein?

6.911 Beiträge seit 2009
vor 5 Jahren

Hallo,

muss man immer durch ein Double-Teilen, wenn man keine Rundungsfehler haben will. Bei Int geht logischerweise immer was verloren.

Gerade bei double gibt es Rundungsfehler*, während int exakt ist.

Nur bei int wird Ganzahldivision angewandt und für diese Aufgabe ist diese nicht das gewünscht, daher ist Abts Hinweis, dass mit double gerechnet werden soll korrekt.

* bedingt durch die Natur der Sache, spezifiziert in IEEE 754

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

4.931 Beiträge seit 2008
vor 5 Jahren

Wenn es nur um ganze Zahlen geht, dann kann man die Rechenoperation auch umstellen:


int mengeAroma = Grundwert * Aroma / 100;

(die Benennung ist aber überarbeitungswürdig)

M
368 Beiträge seit 2006
vor 5 Jahren

Weiterhin könnte man die Eingaben des Nutzers auch auf ihren Gültigkeitsbereich hin überprüfen und parsen lassen: https://www.dotnetperls.com/console-readline

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉