• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zaokragalnie godzin w górę do pelnich dni .

0 głosów
44 wizyt
pytanie zadane 9 stycznia w C i C++ przez sh1nen Obywatel (1,570 p.)

Podczas programowania napotkałem na zaiscie prosty przypadek, natomiast mimo wielu godzin prób i błędówzdecydowałem się skierować pytanie na forum gdyż chyba nie dojdę to tego sam. Mianowicie chciałbym aby w momencie odejmowania od siebie odpowiednich dat, po wyliczeniu otrzymywać ilość dni jakie dane wypożyczenie trwało, problem polega na tym, że chciałbym aby przypadek np. wypożyczenia trwającego 3h rozpatrywano jako dzień, 25h jako 2 dni itd.
 

boost::posix_time::time_duration td = datę_end - datę_start;
int hours = td.total_milliseconds() / (1000*60*60); // 1000 - second / 60 - minutes / 60 - hours / 24 - day
if(hours % 24 == 0)
return hours / 24;
else
return ceil(hours / 24);


Jak widać wyżej, otrzymaną różnicę w czasie, sprowadzam do milisekund, następnie zamieniam na godziny i w warunku staram się jakoś ogarnąć temat zaokroglania do całości, natomiast jak już przetestowałem jest to drogą do nikad, prosiłbym o jakieś wskazówki jak dany problem mógłbym rozwiazć, bo jak mniemam jest on niezwykle prosty ;/

2 odpowiedzi

0 głosów
odpowiedź 9 stycznia przez Criss VIP (119,640 p.)
 
Najlepsza

Po pierwsze powinieneś operować na typach (pseudo)rzeczywistych, żeby zakrąglanie (ceil) miało jakikolwiek sens.

Ja bym zrobił tak:

boost::posix_time::time_duration td = datę_end - datę_start;
double days = static_cast<double>(td.total_milliseconds()) / (1000 * 60 * 60 * 24); 
if(static_cast<long>(days) == days) //jesli liczba jest calkowita
   return days;
else
   return ceil(days);

Zamiast modulo od razu przeszedłem na liczbe dni i wykorzystałem taką sztuczke na sprawdzanie czy liczba jest całkowita, bo modulo dla typów niecałkowitych nie istnieje.

0 głosów
odpowiedź 9 stycznia przez Jakub Wolak Obywatel (1,270 p.)
Zmień ceil ( hours / 24 ) na ceil ( hours / 24.0 ), a także typ zmiennej hours na float.

Podobne pytania

0 głosów
1 odpowiedź 87 wizyt
pytanie zadane 9 stycznia 2016 w PHP, Symfony, Zend przez McFiery Początkujący (250 p.)
+1 głos
3 odpowiedzi 126 wizyt
pytanie zadane 16 sierpnia w C i C++ przez Gorlik1337 Początkujący (410 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 2 listopada 2015 w C i C++ przez tomasztopolewski Początkujący (430 p.)

39,758 zapytań

78,208 odpowiedzi

153,713 komentarzy

18,803 pasjonatów

Przeglądających: 114
Pasjonatów: 1 Gości: 113

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...