Welche Datentyp(in Java) nutzt man für Datum und Geldsumme/ Guthaben in Euro?
für datum kann man theoretisch int nehmen und im format 01012001 machen? oder soll man lieber string nehmen? und für guthaben double?
4 Antworten
Für datum verwendet man z.B. Date oder Calendar, für geldsummen am besten BigDecimal.
Wenn du nur aus diesen Datentypen wählen willst, am ehesten ein String.
also sowohl für datum als auch guthaben?Das ist vorgeschrieben bei der Aufgabe dass man nicht mehr nehmen kann
Nun, Notfalls könntest du einen int bei Geld nehmen, einfach das Guthaben in Cents.
Double/float geht nicht, auch wenn das vielleicht auf den ersten Blick passend aussieht da es eine Kommazahl ist. Das Problem bei Float und Double ist dass es kein genauer wert ist, sondern nur eine Annäherung an einen wert. Es können also Rundungsfehler usw. auftreten, was dazu führt dass plötzlich ein Cent im nichts verschwinden könnte. Das darf bei Geld nicht passieren. Daher kann man bei Geld NICHT Float oder Double verwenden.
Kann man für das Datum auch eine extra Klasse definieren oder ist das eher nicht empfehlenswert?
Ich dachte du sollst nur elementare Datentypen, String und Aufzählungstypen nehmen?
Eine neue machen ist relativ sinnfrei weil es in Java bereits Date, LocalDate und Calendar gibt
Man darf auch seperate Klassen erstellen und die als Datentyp für attribute verwenden. Aber mehr nicht. Hab ich vergessen zu erwähnen
Das kommt halt auch darauf an was du für ein programm hast.
Wenn dein programm mit vielen währungen arbeiten lohnt es sich vielleicht eine klasse zu schreiben welche auch die währung von der geldsumme speichert.
Wenn du mit verschiedenen zeitzonen arbeitest, willst du vielleicht eine date klasse welche zeitzonen speichert und umrechnen kann.
usw..
Kommt immer drauf an wie du sie verwenden willst.
Aber für Datum könnte man ja ne seperate Klasse erstellen
Class Date {
Int month;
Int day;
Int year ;}
Und dann in einer anderen Date datum nutzen
Hast du den kommentar überhaupt gelesen? Du kannst für alles eine seperate klasse erstellen, je nach Anforderungen.
Wenn es nur um das speichern eines Datums geht nimm lieber long und dann die Unix-Zeit (Zeit in Millisekunden seit dem 01.01.1970)
Für Guthaben eignet sich double
Von Double rate ich ab bei Geld ab, das gibt rundungsfehler usw..
Double kann werte nicht genau darstellen, nur Anährungen. Bei Geld sollte man aber genau wissen wieviel Geld man hat.
Klingt unwichtig, aber ist blöd wenn dann irgendwann an einer Stelle ein Cent im Limbo verschwindet.
Ja das ist natürlich richtig. Aber ganz genau geht sowieso nicht (da wird es jetzt aber zu technisch) aber ich bin jetzt nicht davon ausgegangen, dass der Fragesteller eine Anwendung für Banken schreiben will. Daher können die kleinen Rundungsfehler meiner Meinung vernachlässigt werden, wenn das Projekt relativ simpel sein soll
Natürlich geht es ganz genau.
Du kannst einen geldwert z.B. als string speichern, oder als als BigDecimal.
Als Gleitkommazahl is eine schlechte Idee. Das weiß ein erfahrerener Entwickler auch und zieht dir dann punkte für eine Aufgabe ab.
Ja natürlich ist das nicht so klug. Aber wenn man gerade erst mit programmierung anfängt warum dann gleich alles viel zu kompliziert machen? Ja BigDecimal ist auch nicht sonderlich schwer aber wenn man einfach die doubles auf 2 Stellen nach dem Komma rundet, passt das ganze ja auch wieder.
"aber wenn man einfach die doubles auf 2 Stellen nach dem Komma rundet, passt das ganze ja auch wieder."
Bis es dann irgendwann nicht mehr passt, ja.
Meist ist es einfacher dinge von Anfang an richtig zu lernen als sich umzugewöhnen.
Nun, wenn es Währung in einem Videospiel ist, ist es egal. Aber wenn es um echtes Geld geht sollte kein Programmierer mit Gleitkommazahlen ankommen.
Weil wenn du mit gleitkommazahlen arbeitest verschwindet garantiert mal früher oder später an irgendeiner ecke ein cent, oder taucht an einer ecke aus dem nichts auf, das ist nicht gut bei geld.
Ja das habe ich ja auch von anfang an gesagt, in Banken etc. muss das passen. Aber der Fragesteller steht definitiv noch am Anfang von Programmierung und da bin ich der Meinung, dass man erstmal einfach einsteigen sollte, sonst verliert man sehr schnell die Motivation
Es ist eine wohl eine Übungsaufgabe, wenn er da einen falschen Datentypen wählt (wie es Double ist), dann ist das halt einfach ein Fehler.
Er fragt welchen Datentypen man bei Geld nimmt, da ist Double einfach die falsche Antwort. Kann man natürlich machen, ist aber Mist.
In Java gibt es einige Typen für Daten. Welche du nutzten solltest hängt davon ab, wie du sie in deinem Programm verarbeiten willst.
int in Form eines Timestamps ist möglich und in vielen Fällen praktisch
string würde ich allerdings nie nehmen.
DateTime ist ein guter Allrounder. Er unterstützt Konvertierung in einen Timestamp, er kann via format() in jede beliebige Datumspräsentation als String formatiert werden und er bietet viele Möglichkeiten mit Datumsangaben zu rechnen.
Für Geldsummen würde ich int nehmen. 23,50 € würde ich als 2350 speichern. Das ist dann beim Rechnen sehr bequem und du benötigst keine Datentypen für Dezimalzahlen.
lohnt es sich für time und date separate klassen zu erstellen und die als datentyp für ein attribut zu nutzen oder ist das eher verwirrend?
zb
Class Date {
Int month;
Int day;
Int year ;}
oder class time mit int hour und int minute und dann in ner anderen Klasse ein attribut time mit dem Datentyp Time nutzen. Macht das Sinn?
Datum: String
Geld: long
es sind aber nur elementaren Datentypen, String und Aufzählungstypen (ist das enum?) erlaubt