rzutowanie typów

MI
  • Rejestracja: dni
  • Ostatnio: dni
0

witam
mam taki kod

Kopiuj
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)?

Endrju
  • Rejestracja: dni
  • Ostatnio: dni
0

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

MI
  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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).

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
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

MI
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.