myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Ergebnis wird falsch berechnet
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Ergebnis wird falsch berechnet

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Maddin_404 Maddin_404 ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.11.2018
Beiträge: 5


Maddin_404 ist offline

Ergebnis wird falsch berechnet

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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;

C#-Code:
            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..

C#-Code:
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());

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maddin_404 am 06.11.2018 21:30.

06.11.2018 21:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.164
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Besten Dank!
06.11.2018 21:24 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.164
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

1) In Programmiersprachen muss man immer durch ein Double teilen, wenn man keine Rundungsfehler haben will. Bei Int geht logischerweise immer was verloren.

C#-Code:
mengeAroma = Grundwert  / 100.0 * Aroma

2) In einer WriteLine-Operation einen Wert zu deklarieren ist so ziemlich das unübersichtlichste, was man tun kann
3) Dann gib ihm halt ein Double-Wenn Du mit Double-Werten arbeiten willst...? verwundert
Da Du aber verheimlichst, was Du eingibst, was ein Fehler wirft, bleibt uns nur der Blick in die Glaskugel ;-)
4) ich sehe keine Code-Stelle, die die Eingabe ausspuckt. Daher kann ich diese Aussage nicht nachvollziehen.
06.11.2018 22:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Maddin_404 Maddin_404 ist männlich
myCSharp.de-Mitglied

Dabei seit: 06.11.2018
Beiträge: 5

Themenstarter Thema begonnen von Maddin_404

Maddin_404 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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());

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maddin_404 am 06.11.2018 22:31.

06.11.2018 22:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
pinki
myCSharp.de-Mitglied

avatar-4072.jpg


Dabei seit: 24.08.2008
Beiträge: 667
Herkunft: OWL


pinki ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was tippst du denn vorher in die Konsole ein?
07.11.2018 08:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.600
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Zitat:
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ü
07.11.2018 11:33 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.387
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
int mengeAroma = Grundwert * Aroma / 100;

(die Benennung ist aber überarbeitungswürdig)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 07.11.2018 12:15.

07.11.2018 12:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 195
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
07.11.2018 14:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.11.2019 07:12