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

Status
Für weitere Antworten geschlossen.

GasGas

Neuling
Nov 2, 2017
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
Lösung
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...

Taminoful

Administrator
Okt 28, 2017
11
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

RiotSeb

Senior
Nov 1, 2017
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
 

SirYwell

Moderator
Donator
Nov 2, 2017
6
1
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