Zum Inhalt springen

Runden auf 2 Nachkommastellen - Verständnis


Huwy

Empfohlene Beiträge

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 :rolleyes:

Vg

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...