Преобразование формул Google Sheet в логику Django
Я создаю таблицу времени для администратора, чтобы вводить время для пользователей. Я перевожу этот проект из Google Sheets в Django. Я, мягко говоря, в тупике.
Я пытаюсь получить общее количество часов, чтобы оно совпадало с формулой Google Sheet. Но кажется, что моя логика Django не сходится.
Вот формула листа Google:
=(IF((MROUND(F6*24,0.25)-MROUND(F5*24,0.25))>=8,((MROUND(F6*24,0.25)-MROUND(F5*24,0.25)))-0.5,((MROUND(F6*24,0.25)-MROUND(F5*24,0.25)))))
Все ячейки (F5 и F6) заменяются на Start Time и End Time.
Вот моя логика Django.
def calculate_total_time(self,start_time, end_time):
if start_time is not None and end_time is not None:
start_minutes = start_time.hour * 60 + start_time.minute
end_minutes = end_time.hour * 60 + end_time.minute
if end_minutes < start_minutes:
end_minutes += 24 * 60
difference_minutes = end_minutes - start_minutes
total_hours = difference_minutes / 60
# Calculate the rounded total hours
rounded_hours = math.floor(total_hours * 4) / 4
# Adjust for cases where rounding might go over 8 hours
if rounded_hours >= 8:
rounded_hours -= 0.5
return rounded_hours
else:
return 0.00
Некоторые часы отображаются нормально, без проблем, но есть часы, подобные этим, когда логика не сходится. (Картинки для справки)
Я пытаюсь получить то же самое, что выдает формула Google Sheet, несмотря на введенное время, поскольку оно динамическое. Любая помощь будет оценена по достоинству.
Редактирование - Больше фотографий для справки:
Вот что я сделал, и, похоже, это работает. Я неправильно выбрал порядок округления.
if start_time is not None and end_time is not None:
start_minutes = self.mround(start_time.hour * 60 + start_time.minute)
end_minutes = self.mround(end_time.hour * 60 + end_time.minute)
if end_minutes < start_minutes:
end_minutes += 24 * 60
difference_hours = (end_minutes - start_minutes) / 60
# Subtract 0.5 if the difference is greater than or equal to 8
if difference_hours >= 8:
difference_hours -= 0.5
return difference_hours
else:
return 0.00```