Nachkommastellen
-
Hey Leute,
sry wenn ich euch mit so sicherlich einfachen Sachen nerve.. aber ich wollte ein Programm schreiben und testen wie ich die Nachkommastellen auf zwei Ziffern nach dem Komma belassen kann.
if (zahl1 <= 12000)
{
ergebnis = zahl1 * 0.12;label2.Text = Math.Round(ergebnis, 2).ToString() + " Euro";
}
Es gibt zwar bei vielen Zahlen das richtige ergebnis an, aber bei geraden Stellen nur z.B. 720 Euro, oder 0,8 Euro.
Vielen Dank schonmal !
-
Kannst du das etwas genauer beschreiben?
Insbesondere auch welchen Typ zahl1 und ergebnis haben und jeweils Beispiele für Eingaben mit korrekten Ausgaben und für Eingaben mit falschen Ausgaben.
-
sind beides vom Typ Double - es kommen schon immer die richtigen ergebnisse raus, aber bei geraden zahlen z.b. nicht 720,00 Euro sondern 720 Euro - was ich nicht verstehe
-
Das liegt daran, dass bei ToString() nur soviel in die String-Repräsentation deiner Zahl einfließt, wie nötig ist.
In deinem Fall kannst du string.Format(...) benutzen:
label2.Text = string.Format("{0:0.00} Euro", Math.Round(ergebnis, 2));
Hier ist das manuelle Runden sogar überflüssig, denn das übernimmt string.Format, wenn die Zahl mehr Nachkommastellen hat.
Siehe auch:
http://www.csharp-examples.net/string-format-double/
http://msdn.microsoft.com/en-us/library/system.string.format.aspx
-
Noch etwas, da du offenbar mit Geldbeträgen rechnest:
Die Typen float und double sind für sowas nicht geeignet, da sie aufgrund der Floating-Point-Codierung nicht genau genug sind. Man rechnet deswegen eher in Cent als in Euro oder benutzt - in C# - den Typ decimal, der extra dafür gedacht ist. Er ist im Nachkommabereich hinreichend präzise, um damit Finanzberechnungen zu machen: http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.71).aspx
-
Ah okay dankeschön (: ich hab das programmieren erst angefangen daher kenn ich mich noch nicht so aus^^