• 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 .

Object Storage Arubacloud
0 głosów
104 wizyt
pytanie zadane 9 stycznia 2017 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 2017 przez criss Mędrzec (172,590 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 2017 przez Jakub Wolak Obywatel (1,300 p.)
Zmień ceil ( hours / 24 ) na ceil ( hours / 24.0 ), a także typ zmiennej hours na float.

Podobne pytania

0 głosów
0 odpowiedzi 241 wizyt
pytanie zadane 11 grudnia 2018 w JavaScript przez Zelek Użytkownik (960 p.)
0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 9 stycznia 2016 w PHP przez McFiery Początkujący (250 p.)
0 głosów
1 odpowiedź 374 wizyt

92,536 zapytań

141,377 odpowiedzi

319,455 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...