vorkomma und nachkommastellen in c# trennen?
habe eine aufgabe in c# bekommen aber finde keine lösung...
Schreiben Sie ein Programm, das einen Geldbetrag als Wert in Euro einliest (z. B. 23.42) und dann Euro und Cent als getrennte Integer-Werte ausgibt (z. B. 23 Euro und 42 Cent).
3 Antworten
Gibt viele Möglichkeiten
Wert mit Floor abrunden und in int konvertieren. Das sind die Euro
Den abgerundeten Wert vom ursprünglichen abziehen und dann * 100. In int konvertieren. Das sind die Cent
Floor wäre in dem Fall nicht nur redundant (ein Typecast nach int reicht aus), sondern würde im "schlimmsten" Fall auch noch zu fehlerhaften Werten führen.
Solange der Wert größer als oder gleich 0 (bzw. 0,00) ist geht noch alles klar.
ABER: Floor macht z.B. aus -1,5 den Wert -2, obwohl vor dem Komma nur -1 steht. Ein Typecast nach int liefert dagegen den korrekten Wert -1.
int NachkommaStellen = 2;
double Betrag = 12.34;
int VorkommaAnteil = (int)Betrag;
int NachkommaAnteil = (int)((Betrag-VorkommaAnteil)*Math.Pow(10, NachkommaStellen));
Den Rest drumherum musst aber noch selber machen. ^^
Nachtrag: Wenn auch negative Werte behandelt werden sollen, dann eher so:
int NachkommaStellen = 2;
double Betrag = -12.34;
int Vorzeichen = Betrag < 0 ? -1 : 1;
Betrag = Math.Abs(Betrag);
int VorkommaAnteil = (int)Betrag * Vorzeichen;
int NachkommaAnteil = (int)((Betrag-VorkommaAnteil)*Math.Pow(10, NachkommaStellen)) * Vorzeichen;
Damit wäre -12,34 aufgeteilt in
- VorkommaAnteil = -12
- NachkommaAnteil = -34
Wobei du je nach Anwendungsfall das Vorzeichen auch vollständig getrentt von den beiden Teilwerten behandeln oder auch einfach komplett ignorieren/entfernen könntest.
GanzeEuro = int Eingabe;
Cent = (Eingabe - GanzeEuro) * 100;
Und dann halt die Ausgabe
@gfntom: Wenn jemand bei dieser Aufgabe Hilfe benötigt, wird derjenige wohl kaum floor anwenden