2016-03-13 42 views

Odpowiedz

9

r = r * e daje błąd, ponieważ wynikiem r * e jest double więc nie będzie utrata precyzji podczas przechowywania go w int.

r *= e nie daje błąd, ponieważ jest to cukier syntaktyczny dla r = (int)(r * e) (source).

0

To dlatego, że r i e są różne. Podczas używania operatorów przypisania złożonych, takich jak *=, typy są narrowly konwertowane za kulisami (niejawnie). Operator * nie generuje konwersji pośredniej, dlatego musisz przekonwertować bezpośrednio przez odlewanie:

r = (int) (r * e);