C# Convert.ToDouble() - Dezimalpunkt geht verloren ?

locomarco

Commander
Registriert
Aug. 2009
Beiträge
2.446
Hi, hab schon wieder ein Problem mit C#.
Habe im Internet nach ein paar Programmierübungen gesucht und ein paar (die ich ohne Kopfschmerzen lösen konnte) bearbeitet :D

Eine Aufgabe davon war ein Programm zu schreiben das nach dem Preis und Rabatt eines Artikels fragt und den Endpreis ausgibt. Mit C++ ging das wunderbar, bis auf die Tatsache das ich nicht weiß wie ich den Rabatt mit einem Default Parameter ausrechnen soll, aber das ist ein anderes Thema.

Das Problem ist jetzt, das bei der Konvertierung von
Code:
preis = Convert.ToSingle(Console.ReadLine());
der Dezimalpunkt verloren geht, wenn man einen im Preis nutzt.
Gleiches Problem bei prozent.

Gibts da irgendwas besonderes bei C# um einen String richtig in float/double/decimal zu konvertieren?

Übersetzt nach C# kam das raus:

Code:
static void Main(string[] args)
        {
            while (true)
            {
                float preis = 0, prozent = 0;
                Console.Write("Produktpreis: ");
                preis = Convert.ToSingle(Console.ReadLine());
                Console.Write("{0} EURO", preis);
                Console.Write("\n\n");
                Console.Write("Rabatt: ");
                prozent = Convert.ToSingle(Console.ReadLine());
                Console.Write("{0} %", prozent);
                Console.Write("\n\n");
                Console.WriteLine("Endpreis: {0} EURO", berechne_rabatt(preis, prozent));
                Console.Write("___________________________________________\n\n");
            }
        }

        private static float berechne_rabatt(float r_preis, float r_prozent = 5)
        {
            float rabatt = r_preis / 100 * r_prozent;
            float intern_endpreis = r_preis - rabatt;

            return intern_endpreis;
        }
}
 
Zuletzt bearbeitet:
Als Tip zum ausprobieren, das Dezimal Trennzeichen auf deinem Rechner steht wahrscheinlich auf ',' und nicht auf '.', frage nur weil du von Dezimalpunkt sprichst, den gibt es ja im deutschen nicht, da gibt es nur ein Dezimalkomma. Convert verwendet wenn du ihm nichts anderes sagst die lokalen Machineneinstellungen für so etwas.
 
Beim Parsen von Strings zu Zahlen wird immer 'CultureInfo.CurrentCulture.NumberFormat' benutzt.
Wenn du nen Punkt als Dezimaltrennzeichen willst, dann machst du das am besten so:
Code:
var preis = Single.Parse(Console.ReadLine(), CultureInfo.InvariantCulture.NumberFormat);
 
Zacca schrieb:
Als Tip zum ausprobieren, das Dezimal Trennzeichen auf deinem Rechner steht wahrscheinlich auf ',' und nicht auf '.', frage nur weil du von Dezimalpunkt sprichst, den gibt es ja im deutschen nicht, da gibt es nur ein Dezimalkomma. Convert verwendet wenn du ihm nichts anderes sagst die lokalen Machineneinstellungen für so etwas.

Danke, mit Komma funktionierts :D

@grantig:
Von Dezimalpunkt wollen kann man nicht reden, das war eher gezwungenermaßen ;)
 

Ähnliche Themen

Zurück
Oben