Durch Multiplikation mit einem Integer, die von einem Float/Double in Java
Ich versuche, etwas zu tun, so einfach: multiplizieren Sie eine ganze Zahl durch eine float/double:
private final static int a = 100;
...
double d = 0.5; //Although this is like dividing by 2, it could be any decimal.
int x = (int) (a * d);
Jedoch, obwohl Sie erwarten würden, diese zurück x = 50
statt x = 100
! Das gleiche passiert, wenn ich float d = 0.5f
. Weiß jemand, was Los ist und warum funktioniert das nicht?
- Ich denke, java wirft der zweite term in der Bedienung * auf die erste. Versuchen
int x = (int) (d * a);
oderint x = (int) (a * (float) (d))
- Sind Sie ernst? Ist dies nicht möglich. Hast du auch versuchen läuft? Es wird geben 50!!!
- Ich änderte den code, um direkt auf den Punkt des Problems. Ich aktualisierte den code zu reflektieren, das problem genauer.
- Nein. Die Reihenfolge ist dabei unerheblich. Es weitet sich das Ergebnis auf die größere der beiden Arten.
- Ja, ich bin einverstanden.
- Sorry Jungs, ist es kein problem. Moderator, kann Sie löschen?
- Löschen Sie die Frage selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
JLS §4.2.4. Floating-Point-Operationen sagen, Regeln, die für floating-point-operation, so als pro, dass, wenn einer der Operanden eine gleitpunktzahl ist, als andere operand wird verbreitert, um einen floating-point (falls nicht schon geschehen) und das Ergebnis ist eine Fließkommazahl.
So, Ihr
int
100
wird verbreitert, um100.0
vor arithmetischer operation und Ihrem Ergebnis der operation wird50.0
.Nun, da sind Sie Gießen Sie Ihr Ergebnis in
int
, so JSL §5.1.3. Narrowing Primitive Conversion anwendbar sein wird, und doppelklicken50.0
eingeengt int50
.100 ist ein Unmögliches Ergebnis, da der code, den Sie zur Verfügung gestellt haben.
Meine Vermutung ist, dass, wenn Sie bekommen 100, Sie hätte etwas anderes getan.