Gelöst Nummern größer als "Integer.MAX_VALUE"

  • Hallo Gast,

    um unseren Lesern und Nutzern das best mögliche Seitenerlebnis bieten zu können nutzen wir Google Analytics.
    Um mehr über unsere Nutzung von Google Analytics zu erfahren, kannst du in unserer Datenschutzerklärung unter dem Punkt "Datenschutzerklärung für die Nutzung von Google Analytics" mehr erfahren und, wenn gewünscht, die Nutzung von Google Analytics via Klick auf den Link "Google Analytics deaktivieren" unterbinden.

    Wir verwenden für Google Analytics ein Opt-In Verfahren.
    Solltest du die Nutzung Cookies nicht aktzeptieren, wirst du weder getracked noch werden Cookies von Google Analytics gesetzt.
    (Das Deaktivieren steht dir allerdings immer zur Verfügung)
Status
Für weitere Antworten geschlossen.

GasGas

Neuling
Original poster
Mitglied seit
Nov 2, 2017
Beiträge
4
Hey!

Ich habe ein Problem mit den Limits des Integers.

Meine Problemstellung:

Java:
public enum Factories {

    Trailer(1,"Trailer", 2000, 500, 5, 0.4),
    House(2, "House", 100000, 5000, 10 , 4.4),
    Facility(3, "Facility",1000000, 50000, 30, 13.8),
    Island(4, "Island", 30000000, 50000, 40, 83.2),
    Hideout(5, "Hideout", 100000000, 90000, 45, 152),
    China(6, "China", 2000000000, 500000, 200, 782),
    Moon(7, "Moon", 50000000000, 50000000, 50, 24560);


    int ID;
    String Name;
    int Cost;
    int maxworkers;
    int workercost;
    double benefit;

    Factories(int ID,String Name, int cost, int workercost,int maxworkers , double benefit){
        this.ID = ID;
        this.Name = Name;
        this.Cost = Cost;
        this.maxworkers = maxworkers;
        this.benefit = benefit;
        this.workercost = workercost;
    }
Java:
   public String getName() {
        return Name;
    }

    public int getCost() {
        return Cost;
    }

    public int getID() {
        return ID;
    }

    public int getMaxworkers() {
        return maxworkers;
    }

    public double getBenefit() {
        return benefit;
    }

    public int getWorkercost() {
        return workercost;
    }

    public static Factories getFactory(int ID){
        for(Factories s: Factories.values()){
            if(s.getID() == ID){
                return s;
            }
        }
        return null;
    }
}

Mein Problem ist das Ich mit "50000000000" die Limits von einen Integer erreiche.
Java:
Moon(7, "Moon", 50000000000, 50000000, 50, 24560);
Die Frage:
Wie kann ich dieses Limit umgehen?

lg GasGas
 
  • Like
Reaktionen: MBK

Taminoful

Administrator
Mitglied seit
Okt 28, 2017
Beiträge
7
Die Grenzen von einem Integer zu hintergehen ist eine Macht, die nur einer erlangt hat.
Aber wenn wir zusammen arbeiten, dann können wir das Geheimnis lüften.
Mal Spaß und abgewandelte Star Wars Zitate zur Seite.
Du handhabst da wirklich mit ein paar großen Zahlen, hierfür sollte der primitive Datentyp long (Siehe auch Long) ausreichend sein.
Danach bleibt dir für dieses Problem, sollte das Limit von long ebenfalls überschritten werden, beispielsweise noch BigInteger aus dem java.math Package.
 
  • Like
Reaktionen: MBK

GasGas

Neuling
Original poster
Mitglied seit
Nov 2, 2017
Beiträge
4
Ich habe gar nicht mehr auf long auf gedacht :banghead::banghead:.....

Danke!
 

RiotSeb

Moderator
Mitglied seit
Nov 1, 2017
Beiträge
3
Ich weiß zwar nicht, wofür du diese riesige Zahl brauchst (Entfernung? Kaufpreis?) aber du könntest sie runterskalieren, in dem du z.B alle Zahlen die diese Sache(Entfernung? Kaufpreis?) beschreiben etwa durch 1000 teilst. Dies kann nützlich sein, wenn einem die Zahlen irgendwann zu groß werden.

Gruß Sebastian
 

GasGas

Neuling
Original poster
Mitglied seit
Nov 2, 2017
Beiträge
4
Gute Idee aber ich muss noch zu Zahlen Größen kommen die max. 100 Quadrillion betragen...

Das nächste Problem ist die Datenbank da ich mich nicht so gut mit SQL bzw. MySql auskenne stellt sich das nächste Problem die Limits dessen Integers (int(11)).
 

SirYwell

Moderator
Unterstützer
Mitglied seit
Nov 2, 2017
Beiträge
5
Da kommt echt die Frage auf, für was du diese Zahlen brauchst. Aus deinem Code entnehme ich, dass es Kosten sind. In Java kannst du BigIntegers verwenden und deinen Datentyp von int/long ebenfalls auf BigInteger oder String umstellen. Auch in der Datenbank wäre es wahrscheinlich das einfachste, so große Zahlen als varchar zu speichern.
 
Status
Für weitere Antworten geschlossen.

Users Who Are Viewing This Thema (Users: 0, Guests: 1)