Welche Datentyp(in Java) nutzt man für Datum und Geldsumme/ Guthaben in Euro?

4 Antworten

Für datum verwendet man z.B. Date oder Calendar, für geldsummen am besten BigDecimal.

Denkschulen 
Fragesteller
 20.11.2021, 15:31

es sind aber nur elementaren Datentypen, String und Aufzählungstypen (ist das enum?) erlaubt

0
jort93  20.11.2021, 15:33
@Denkschulen

Wenn du nur aus diesen Datentypen wählen willst, am ehesten ein String.

0
Denkschulen 
Fragesteller
 20.11.2021, 15:34
@jort93

also sowohl für datum als auch guthaben?Das ist vorgeschrieben bei der Aufgabe dass man nicht mehr nehmen kann

0
jort93  20.11.2021, 15:44
@Denkschulen

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.

0
Denkschulen 
Fragesteller
 21.11.2021, 10:05
@jort93

Kann man für das Datum auch eine extra Klasse definieren oder ist das eher nicht empfehlenswert?

0
jort93  21.11.2021, 14:17
@Denkschulen

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

0
Denkschulen 
Fragesteller
 21.11.2021, 16:53
@jort93

Man darf auch seperate Klassen erstellen und die als Datentyp für attribute verwenden. Aber mehr nicht. Hab ich vergessen zu erwähnen

0
jort93  21.11.2021, 16:56
@Denkschulen

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.

0
Denkschulen 
Fragesteller
 21.11.2021, 17:35
@jort93

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

0
jort93  21.11.2021, 18:06
@Denkschulen

Hast du den kommentar überhaupt gelesen? Du kannst für alles eine seperate klasse erstellen, je nach Anforderungen.

0

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

jort93  20.11.2021, 15:28

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.

0
chriss1967  20.11.2021, 15:30
@jort93

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

0
jort93  20.11.2021, 15:31
@chriss1967

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.

0
chriss1967  20.11.2021, 15:34
@jort93

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.

0
jort93  20.11.2021, 15:37
@chriss1967

"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.

0
chriss1967  20.11.2021, 15:39
@jort93

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

0
jort93  20.11.2021, 15:41
@chriss1967

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.

0

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.

Woher ich das weiß:Berufserfahrung – Berufserfahrung
Denkschulen 
Fragesteller
 21.11.2021, 21:46

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?

0

Datum: String

Geld: long

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf