kostenloser Webspace werbefrei: lima-city


If <= 2147483647

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    dustin1

    Kostenloser Webspace von dustin1, auf Homepage erstellen warten

    dustin1 hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. dustin1 schrieb: Ich habe hier ein kleinen Ausschnit aus meinem Script, der überprüfen soll ob die Eingabe &lt;= 2147483647 ist.
    if(owner.getMeso() + pItem.getPrice() * quantity &lt;= 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.
  4. Autor dieses Themas

    dustin1

    Kostenloser Webspace von dustin1, auf Homepage erstellen warten

    dustin1 hat kostenlosen Webspace.

    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! :)
  5. c*****s

    Java rechnet in signed Integern.

    Leider habe ich gerade kein Java-SDK installiert, aber mit C++ ist es auch nicht anders:
    #include <iostream.h>
    int main(int argc, char *argv[])
    {int x = 2147483649;
    int y = 2147483647;
    
    if(x < y){
         cout << "2147483649 < 2147483647 ;-)";
    }
        
    system("PAUSE");
    }
    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
    if(x < 0){...}
    da auch ein mehrfacher Überschlag möglich ist, der dann wieder positiv sein könnte.

    Ich würde das Ergebnis einfach als long casten und dann den Test ausführen.
    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."));
    }
    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....

    Beitrag zuletzt geändert: 8.3.2009 18:22:33 von caiexus
  6. 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ß
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!