Reallife Scoreboard programmieren

  • Guten Abend

    Ich habe mal eine Frage und zwar habe ich schon ein bischen rum probiert und im Internet geschaut, und bin gerade dabei ein "Reallife" Scoreboard zu programmieren, Reallife darum weil es so funktionieren soll das es nicht ab einem bestimmten größeren Wert bei Geld "E" Zahlen im Scoreboard steht, und das es zwei Nachkommastellen gibt die korrekt die Cents anzeigen.

    Später sollte es dann mit MySQL verbunden sein.

    Jetzt habe ich sowei alles aber weiß nocht nicht richtig wie ich jetzt die Nachkommastellen programmiere?

    Habe bereits etwas ausgetestet mit einer BigDecimal und dem Rounding Mode.

    Jetzt weiß ich halt nicht wie ich das machen könnte.

    Welche Funktionen stellt Java mir?


    Kann mir jemand weiterhelfen? :)

    MFG

  • Hi, grundsätzlich hast du dafür zwei Möglichkeiten:

    • Du speicherst das Geld als Gleitkommazahl, entweder double oder float. Um die Zahl dann mit zwei Nachkommastellen auszugeben, kannst du dann beispielsweise String strDouble = String.format("%.2f", 1.9999); verwenden (vgl. z. B. https://www.java67.com/2014/06…-number-java-example.html). Das größte Problem allgemein bei Gleitkommazahlen ist, dass die interne Repräsentation im Computer durch das IEEE 754-Format geschieht (vgl. hierfür https://de.wikipedia.org/wiki/IEEE_754). V. a., wenn jemand viel Geld auf dem Konto hat, kann es leicht passiern, dass es zu Rundungsfehlern kommt. Durch die Verwendung von BigDecimal kannst du natürlich die Genauigkeit erhöhen, aber die Verwendung der Klasse erzeugt einen großen Overhead und rechnet ab einem bestimmten Punkt unter Umständen auch nicht mehr korrekt.
    • Du speicherst eine Kommazahl, indem du diese mit 100 multiplizierst und in einem Integer speicherst. Beispielsweise stellst du 1234,56 mit 123456 dar. Zur einfacheren Arbeit kannst du (musst du aber nicht) eine eigene Klasse Money zur Repräsentation einer Kommazahl mit zwei Nachkommastellen im Dezimalsystem anlegen (u. a. Methoden wie getString oder getDatabaseValue kann man da gut implementieren). Hier gibt es keine Rundungsfehler, der Wertebereich ist aber auch deutlich kleiner als bei Gleitkommazahlen (hier musst du dir überlegen, wie viel Geld Spieler in der Realität wohl maximal auf dem Server haben).

    LG Gabriel

  • Hey gabriel2029 :)


    Vielen Dank für deine informative Antwort!

    Also eigentlich sollte jeder Betrag korrekt dargestellt werden,

    auf dem Server sollte es bis min. 100.000.000,00 € darstellen können oder mehr, jetzt weiß ich auch nicht welche Varriante für mich eher in Frage kommt.

    Es müsste irgendeine Möglichkeit geben alle Zahlen anzeigen zu lassen mit zwei Nachkommastellen ?

    Oder würde es eventuell klappen das man die Euros setzt und dann ein Komma und im Anschluß die Cents also eine extra Double oder eine BigDecimal?


    LG NsuperT

  • Hi, der Integer speichert bis maximal 2^31 - 1, der Long bis maximal 2^63 - 1 (vgl. https://de.wikibooks.org/wiki/…ard:_Primitive_Datentypen). Der Long dürfte für deine Anforderungen wohl locker reichen. Ansonsten kannst du dich auch mit BigIntegern (https://docs.oracle.com/javase…java/math/BigInteger.html) beschäftigen. Achte auf jeden Fall darauf, dass du in der Datenbank den richtigen Datentyp auswählst, z. B. bei Long und MySQL BIGINT.


    LG Gabriel