If <= 2147483647
lima-city → Forum → Programmiersprachen → Java
-
Ich habe hier ein kleinen Ausschnit aus meinem Script, der überprüfen soll ob die Eingabe <= 2147483647 ist.
if(owner.getMeso() + pItem.getPrice() * quantity <= 2147483647) { ... } else { c.getSession().write(MaplePacketCreator.serverNotice(1, "The owner reaches too much money, you can't buy this item.")); }
Irgendwie funktioniert das ganze nicht, das Item wird trotzdem gekauft. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
dustin1 schrieb: Ich habe hier ein kleinen Ausschnit aus meinem Script, der überprüfen soll ob die Eingabe <= 2147483647 ist.
if(owner.getMeso() + pItem.getPrice() * quantity <= 2147483647) { ... } else { c.getSession().write(MaplePacketCreator.serverNotice(1, "The owner reaches too much money, you can't buy this item.")); }
Irgendwie funktioniert das ganze nicht, das Item wird trotzdem gekauft.
Schreib mal:
System.out.println("Test:"+(owner.getMeso() + pItem.getPrice() * quantity));
Und schau dir dann die Ausgabe an.
Denn der Code scheint richtig zu sein. -
Er sagt dann "21474836471", liegt wahrscheinlich daran, dass es ein Integer ist? Ich hab es jetzt mal mit Double probiert und es klappt. Vielen Dank! :)
-
Java rechnet in signed Integern.
Leider habe ich gerade kein Java-SDK installiert, aber mit C++ ist es auch nicht anders:
2147483647 ist wie du ganz richtig erkannt hat, die größte positive Zahl, die in int passt. Wenn die Zahl größer wird, gibt es einen Übertrag, dann wird sie negativ. Das Problem ist, dass du nicht einfach sagen kannst#include <iostream.h> int main(int argc, char *argv[]) {int x = 2147483649; int y = 2147483647; if(x < y){ cout << "2147483649 < 2147483647 ;-)"; } system("PAUSE"); }
da auch ein mehrfacher Überschlag möglich ist, der dann wieder positiv sein könnte.if(x < 0){...}
Ich würde das Ergebnis einfach als long casten und dann den Test ausführen.
ok, theoretisch kann es sein, dass das auch nicht in den Zahlenbereich long passt (der kann mit der Multiplikation von zwei ints schon ausgeschöpft sein), da noch ein int addiert wird....iif( (long) owner.getMeso() + (long) pItem.getPrice() * (long) quantity <= 2147483647L) { ... } else { c.getSession().write(MaplePacketCreator.serverNotice(1, "The owner reaches too much money, you can't buy this item.")); }
Beitrag zuletzt geändert: 8.3.2009 18:22:33 von caiexus -
Hallo,
du kannst auch auf (unsigned long) casten. das würde dann bis 18.446.744.073.709.551.615 (laut wiki) gehn.
Wenn du sicher gehn willst, dass der Wertebereich nicht überlaufen wird (empfehlenswert!):
(Long.UnsignedMaxValue - Wert1) >= Wert2
btw. das benutzen von konstanten kann dann doch sehr von vorteil sein (anstatt 2147............)
gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage