Mehrwertsteuerberechnung Switch Case



  • Hallo Zusammen,

    Win
    C++
    Visual Studio 2017
    Switch Case, IF Else

    Ich habe folgendes Problem, meine Code berechnet mit nicht den Inhalt der Else-Anwendung, wie kann ich prüfen ob die Variable Mehrwertsteuersatz den "Wert" aus der Switch Case-Anwendung übernimmt ?
    Denke entweder bleibt meine Variable 0 oder meine Else Anweisung ist falsch.

    Dankeschön

    int main()
    {
    //Variablen
    double Nettopreis =0;
    double Mehrwertsteuersatz =0;
    double Mehrwertsteuer =0;
    int Ware =0;
    //Eingaben
    cout << "Bitte wählen Sie die Warenart aus: \r\n";
    cout << "0 fuer Lebensmittel\r\n";
    cout << "1 fuer Fahrscheine\r\n";
    cout << "2 fuer Maulesel\r\n";
    cout << "3 fuer Cappuccino und Kaffe\r\n";
    cout << "4 fuer monatliche Miete\r\n";
    cout << "5 fuer Sogenannte Take-Away-Geschäfte\r\n";
    cout << "6 fuer Mahlzeit im Lokal\r\n";
    cout << "7 fuer Artzrechnungen\r\n";
    cout << "Ihre Wahl ist: ";

    cin >> Ware;
    
    cout << "Bitte geben Sie den Nettopreis an: ";
    
    cin >> Nettopreis;
    
    //Berechnungen
    switch (Ware)
    {
    case 0: //0 für Lebensmittel
    {
    	Mehrwertsteuersatz = 0,07;
    	break;
    }
    case 1: //1 für Fahrscheine
    {
    	Mehrwertsteuersatz = 0,07;
    	break;
    }
    case 2: //2 für Maulesel
    {
    	Mehrwertsteuersatz = 0,07;
    	break;
    }
    case 3: //3 für Cappuccino und Kaffe
    {
    	Mehrwertsteuersatz = 0,19;
    	break;
    }
    case 4: //4 für monatliche Miete
    {
    	Mehrwertsteuersatz = 0,00;
    	break;
    }
    case 5: //5 für Sogenannte Take-Away-Geschäfte
    {
    	Mehrwertsteuersatz = 0,07;
    	break;
    }
    case 6: //6 für Mahlzeit im Lokal
    {
    	Mehrwertsteuersatz = 0,19;
    	break;
    }
    case 7: //7 für Artzrechnungen
    {
    	Mehrwertsteuersatz = 0,00;
    	break;
    }
    
    default: //Fehler nicht zugelassener Eingabewert
    {
    	Mehrwertsteuersatz = 99.0; //später abfragen!!!
    }
    };
    
    if (Mehrwertsteuersatz == 99.00)
    {
    	cout << "Sie haben eine unbekannte Warenart ausgewaehlt!\r\n";
    }
    else
    {
    	//Nettopreis = 
    	Mehrwertsteuer = Nettopreis * Mehrwertsteuersatz;
    	cout << "Der Mehrwertsteuersatz betraegt " << 100 * Mehrwertsteuersatz << "%\r\n";
    	cout << "Die Mehrwertsteuer betraegt " << Mehrwertsteuer << "Euro\r\n";
    	cout << "Sie zahlen Brutto " << Nettopreis + Mehrwertsteuer << "Euro\r\n";
    };
    
    //Ausgaben
    
    system ("Pause");
    
    std::cout << "Ende!\n";


  • @pfeatme Vergleich mal deine Angaben in den case-Zweigen mit denen im default, bzw. im if-Zweig.
    Zeichen für Zeichen.



  • @dirkb default wird ja nur ausgeführt wenn meine Ware >0 oder <7 ist also die Else-Anwendung wird ausgeführt er gibt mir nur für Mehrwertsteuersatz 0% , Mehrwertsteuer 0Euro und den Nettopreis als Brutto aus. Gibt es eine Möglichkeit Step by Step zu sehen ob mein Wert für Mehrwertsteuersatz sich ändert ?

    Oder hast du den Fehler schon gesehen ?



  • 0.07 und 0.19 nicht 0,07 und 0,19.
    Beim switch kannst du auch in den nächsten Zweig durchfallen, damit verkürzt sich Code:

    ...
    case 0: //0 für Lebensmittel
    case 1: //1 für Fahrscheine
    case 2: //2 für Maulesel
    	Mehrwertsteuersatz = 0.07;
    	break;
    case 3: //3 für Cappuccino und Kaffe
    case 6: //6 für Mahlzeit im Lokal
    	Mehrwertsteuersatz = 0.19;
    	break;
    ...
    usw.
    


  • @yahendrik sagte in Mehrwertsteuerberechnung Switch Case:

    Dankeschön, das hab ich nicht bemerkt mit dem Komma.
    Wünsche noch einen schönen Tag



  • @dirkb sagte in Mehrwertsteuerberechnung Switch Case:

    Vergleich mal ... Zeichen für Zeichen.

    Dann hättest du das Komma bemerken müssen.



  • @Pfeatme
    Hat zwar mit deiner Frage nix zu tun, aber weil's wichtig ist: Geld und floating-point (float, double), das passt nicht zusammen!
    Gerade Steuerberechnungen haben (mindestens) auf den Cent genau zu sein (bzw. IIRC sogar auf 1/100 Cent). Da haben floating point Zahlen schonmal grundsätzlich nix zu suchen und auf dem Binärsystem basierende floating point Zahlen gleich doppelt nicht.



  • Hi Hustbaer,

    stimmt, aber nicht nur wegen der Zulässigkeit. Auch wenn auf Gleichheit getestet wird haben floating point Zahlen nichts zu suchen. 99.00 ist ja zum Glück eine Zahl ohne Nachkommastellen und damit auf normalen Rechnerarchitekturen vermutlich genau. (obwohl ich mir da auch nicht sicher bin, wenn der Rechner die normalisiert ablegt als .99 * 10² dann ist das im Rechner nicht mehr exakt darstellbar). Damit wäre (theoretisch) schon der Vergleich Mehrwertsteuersatz == 99.00 davon abhängig, in welchem Format der Compiler die Konstante 99.00 ablegt. In dem Fall wirds gehen, aber reine Vergleiche würde ich immer entweder mit Ganzzahlen oder im Währungsformat machen. Oder eben mit Bereichsvergleich wie >= 98.99

    Gruß Mümmel



  • Solange der Compiler für float IEEE 754 single precision benutzt, kannst du im Datentyp float Ganzzahlen gg im Bereich g16777216=(124)|g| \le 16777216 = (1\ll24) exakt darstellen. 99 ist nicht 0.99×1020.99 \times 10^2, zumal die IEEE754 auch nicht mit Zehnerpotenzen, sondern mit Zweierpotenzen arbeitet.

    Wenn man auf spezieller Hardware arbeitet, wo nicht IEEE754 benutzt wird, muss man sich entsprechend anschauen, wie dort die Zahlen dargestellt werden.


Log in to reply