WinFuture-Forum.de: C# Fehler bei der Division - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# Fehler bei der Division Wo ist mein Fehler


#1 Mitglied ist offline   bartii 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.428
  • Beigetreten: 02. August 05
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 05. November 2011 - 23:42

Hi,

ich habe zur Übung einen WechselgeldRechner zusammengeschustert.
Kann mir jemand helfen und sagen wo der Fehler liegt?

Er dividiert einfach nicht 0,05 durch 0,05?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WechselGeld
{
    class WechselGeldMethode
    {
        public void RestGeld()
        {
            Console.Write("Geben Sie den Preis des Produktes ein: ");
            double preisProdukt = Convert.ToDouble(Console.ReadLine());
            Console.Write("Geben Sie den bezahlten Betrag ein: ");
            double gezahltesGeld = Convert.ToDouble(Console.ReadLine());
            double restGeld = gezahltesGeld - preisProdukt;
            Console.WriteLine("Restgeld: " + (gezahltesGeld - preisProdukt));

            double[] array1 = new double[] { 5.00, 2.00, 1.00, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01 };
            int i = 0;
            while (i <= 8)
            {
                
                double abziehen = array1[i];
                double wert = Math.Floor(restGeld / abziehen);
                // double rest = restGeld % array1[i] ;
                if (wert >= 1)
                    restGeld = (restGeld - wert*abziehen);
                Console.WriteLine("Anzahl von " + array1[i] + " Euro: " + wert);
                i++; 
          }
            Console.ReadLine();


        }
    }
}



ich habe schon
while (i <= 8)
gesetzt, da scheinbar das Programm andernfalls in eine Endlosschleife läuft.

Ursprünglich wollte ich
while (i >= 0.01)
eintragen.

Sagen wir mal, das Produkt kostet 3,75


Ich denke es ist ein großer Anfängerfehler :)

Danke

Angehängte Miniaturbilder

  • Angehängtes Bild: fehler.png

Dieser Beitrag wurde von bartii bearbeitet: 05. November 2011 - 23:59

Software is like sex. It is better when it's free.. (Linus Torvalds)
0

Anzeige



#2 Mitglied ist offline   Gast 

  • Gruppe: aktive Mitglieder
  • Beiträge: 818
  • Beigetreten: 02. September 07
  • Reputation: 22

geschrieben 06. November 2011 - 02:52

Es liegt wahrscheinlich am Rundungsfehler der Gleitkommazahl (double)

Lies dir das mal durch: Double und Float (Ist zwar Java aber es geht ja nur um den Datentyp)

Versuche es mal wenn du hier auf 1/1000 rundest:

 double wert = Math.Floor(restGeld / abziehen + 0.005);

Alle sagten es geht nicht, da kam einer der das nicht wusste und tat es einfach.
1

#3 Mitglied ist offline   bartii 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.428
  • Beigetreten: 02. August 05
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 06. November 2011 - 23:01

Danke! Das war der Fehler. Ich habe jetzt Decimal genommen und es funktioniert ohne Probleme :)
Software is like sex. It is better when it's free.. (Linus Torvalds)
0

#4 _nobido_

  • Gruppe: Gäste

geschrieben 07. November 2011 - 09:09

Beitrag anzeigenZitat (bartii: 05. November 2011 - 23:42)


            double restGeld = gezahltesGeld - preisProdukt;
            Console.WriteLine("Restgeld: " + (gezahltesGeld - preisProdukt));




Ohem, müsste es nicht
preisProdukt - gezahltesGeld
heissen?
0

#5 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 07. November 2011 - 11:10

@nobido Nein, da du gleich viel oder mehr Geld zahlst als das Produkt wert ist, aber niemals weniger. Wenn das Produkt 95 € kostet und du mit einem Hunderter zahlst, bekommst du 5 € zurück. Ergo:

preisProdukt = 95;
gezahltesGeld = 100;

restGeld = gezahltesGeld - preisProdukt; // restGeld = 5
0

#6 _nobido_

  • Gruppe: Gäste

geschrieben 07. November 2011 - 15:21

Hiho witi,

also ich sehe und verstehe was du mir zu verdeutlichen versuchst.

<hmpf!>
Ärger. Irgendwie hatte ich heute Morgen noch negative Beträge als Ausgabe.
Hatte da dann was geändert damit die positiv wurden.
War aber auch nochr recht früh bzw. recht spät - jeh nachdem, wie man die Sache sieht.

okok.
Tschuldigung dafür.

greetz
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0