Typy w podstawowych działaniach

0

Chcę napisać skrypt, który policzy mi ile potrzebuję opakowań, jeśli mam wiele pudełka o pojemności X i dokładnie Y sztuk towaru. Skrypt ma mi policzyć ile potrzebuję pudełek, żeby zapakować cały towar Y.
W podanym skrypcie użyłem typu int tworząc zmienne x i y, a typu double tworząc zmienną wynik. Wartość zwracana przez wynik była liczbą bez przecinka (reszta została ucięta, tak jakbym konwertował do typu int).
Zmieniłem typ zmiennych x i y na double. Od tej pory zmienna wynik przyjmuje zawsze wartości z przecinkiem, a wynik był taki jak oczekiwałem.
Więc pytanie. Czemu musiałem zmienić typ zmiennych, które nie zmieniały wartości?

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
  double m, w;
  cin >> m >> w;
  double wynik = w / m;
  cout << ceil(wynik);
}
0

Dzielenie dwóch liczb int daje wynik int (czyli tylko część całkowita). To, że potem przypiszesz ją do liczby double nic już nie zmieni, bo tej części po przecinku nigdy nie było.

Wystarczyło wprowadzić do działania jakąkolwiek liczbę o typie zmiennoprzecinkowym (static_cast<double>(...)) i wtedy wszystkie liczby zostaną skonwertowane do tego typu (floating point promotion).

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