rzutowanie typów

0

witam
mam taki kod

int health_bonus=(float)m.health/100;

Kompilator wyrzuca błąd - > conversion from 'float' to 'int', possible loss of data
Chciałbym aby health_bonus było zwykłym intem
Załóżmy że m.health = 22.
Jednak jeśli dam
int health_bonus=m.health/100;
to health_bonus będzie =0; (m.health jest typu int) czyli int 22/ int 100 = 0
więc rzutowanie na float w tym wypadku jest uzasadnione.
Jak znowu jawnie rzutować float na int (bez pomocy tworzenia nowej zmiennej, lub używania funkcji round() itp)?

0

Od kiedy to jest error, powinien być tylko warning. Kod jest prawidłowy.

0

tak, to jest tylko ostrzeżenie, program się kompiluje...
Jak to powinno wyglądać poprawnie?

0

Możesz opisać jaki efekt chcesz uzyskać? Być może rzutowanie nie jest w ogóle potrzebne. Nie mogę doszukać się logiki w (float)m.health/100. Jeżeli m.health będzie równe 22, to i tak wynik zapisany w int health_bonus będzie 0 po całej tej zabawie).

0

jak chcesz zaokrąglić to tak:
int health_bonus=(int)((float)(m.health)/100+0.5);

jak chcesz się pozbyć warninga, to kompilator musi wiedzieć, że robisz to świadomie:
int health_bonus=(int)((float)m.health/100);

aczkolwiek jeśli m.health jest mniejsze od 50 to i tak wyjdzie Ci 0

0

dzięki za odpowiedzi
m.health jest zawsze większe od 100

1 użytkowników online, w tym zalogowanych: 0, gości: 1