Huwy Geschrieben 20. Juli 2009 Teilen Geschrieben 20. Juli 2009 Hallo zusammen, ich habe eine Verständnisfrage. Ich runde in einem Art POS-System Preise auf 2 Stellen hinter dem Komma. Nur als Beispiel ... double roundsum = Math.round(sum * 100.0) / 100.0; Warum muss ich 100.0 benutzen und nicht 100? Hab's durch Probieren herausgefunden, aber würde es gern verstehen Wahrscheinlich ganz logisch, aber ich steh total aufn Schlauch Vg Thomas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ulfmann Geschrieben 20. Juli 2009 Teilen Geschrieben 20. Juli 2009 Moin, Math.round gibt einen long zurück. Wenn du diesen nun durch eine Gleitkommazahl dividierst, kommt es zur Typumwandlung und du hast deinen Double mit 2 Kommastellen. So würde ich mir das erklären. Math.round(sum * 100) / 100.0; würde dir auch dein gewünschten Wert liefern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huwy Geschrieben 20. Juli 2009 Autor Teilen Geschrieben 20. Juli 2009 Ah danke! Ergibt auf jeden Fall Sinn Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sofus Geschrieben 20. Juli 2009 Teilen Geschrieben 20. Juli 2009 Hallo Huwy, das Ganze ist so, wenn du 100 schreibst dann nimmt der Compiler an das es ein int ist, wenn du hingegen 100l schreibst ist es ein long, bei 100.0f ist es ein float und bei 100.0 double. Allerdings kann ich auch nach mehrmaligem durchsehen überhaupt keinen Grund erkennen warum du 100.0 schreiben müsstest anstatt 100, da ein cast von einem kleinen Wert wie int, long, float in einen größeren Wert wie double vom Compiler immer stillschweigend vorgenommen wird. Bei Geldbeträgen und double oder float bin ich immer besonders Vorsichtig, eigentlich würde ich hier lieber je nach Größe das Betrags int oder long empfehlen. Warum? Weil double x = 0.1 + 0.1 + 0.1 ungleich 0.3 ist! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Sofus Geschrieben 20. Juli 2009 Teilen Geschrieben 20. Juli 2009 Ok, ich muss mich korrigieren. Math.round() liefert eine Ganzzahl und wenn du eine Ganzzahl durch eine Ganzzahl teilst werden die Nachkommastellen immer abgeschnitten, da die Berechnung wieder eine Ganzzahl ergibt und erst dann eine Konvertierung nach double stattfindet. -Mein Fehler :old Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ulfmann Geschrieben 20. Juli 2009 Teilen Geschrieben 20. Juli 2009 Aber der Punkt ist doch der, dass long immer eine Ganzzahl ist. Und wenn diese nun durch eine Gleitkommazahl (100.0 in diesem Fall) dividiert wird, kann das Ergebnis kein long mehr sein, weil ein Komma her muss. Oder denk ich jetzt zu einfach? Edit: Ok, dann wär das geklärt! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Huwy Geschrieben 20. Juli 2009 Autor Teilen Geschrieben 20. Juli 2009 Hehe da hattet ihr wohl beide den gleichen Gedanken Ich hatte einfach immer trotz dem Teilen durch 100 eine Zahl x.0 als Ergebnis. Aber danke nochmal. Hab es nun verstanden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.