Раунд Python перемещается на максимально возможное число в зависимости от дней (Полный день, половина дня)

#python #python-3.x

Вопрос:

Раунд Python перемещается на максимально возможное число в зависимости от дней (полный день, половина дня)

Полный День = 1, Полдня = 0,5

Я хочу перейти к наибольшему числу, основанному на десятичных знаках.

Например

 gt;gt;gt; round(30/12, 2) 2.5 # 2 and half day  gt;gt;gt; round(20/12, 2) 1.67 # 2 Days  gt;gt;gt; round(15/12, 2) 1.25 # 1 Day  gt;gt;gt; round(4/12, 2) 0.33 # Half day  

мой код

 total_leaves = 15 # 30,10,20,15 monthly_leaves = round(total_leaves / 12, 2) monthly_leaves_final = 0  leave_one = int(str(monthly_leaves).split('.')[0]) leave_two = Decimal(str(monthly_leaves).split('.')[1])  if leave_two in [5, 5.0]:  monthly_leaves_final = '%s.%s' % (leave_one, 5)  if leave_two gt; 5:  monthly_leaves_final = '%s.%s' % (leave_one   1, 0)  if leave_two lt; 5:  monthly_leaves_final = '%s.%s' % (leave_one - 1, 0)  

Комментарии:

1. Я не понимаю, почему 1,67 округляется до следующего тайма, когда 1,25 округляется вниз

2. Я имею в виду, почему 1.25 -gt; 1, когда 1.67 -gt;gt; 2

3. @Alex028502 Мне нужно распределить листья по месяцам. Поэтому отпуск должен быть на полный день или на полдня

4. @Alex028502 если деление от 1,1 до 1,4, то это будет 1 Полный день. Если 1,5, то 1 с половиной дня, если от 1,6 до 2,9, то это будет 2 дня

5. Таким образом, единственный способ получить ответ на полдня-это если это ровно полдня? а в противном случае он округляется до ближайшего полного дня?

Ответ №1:

Вы можете округлить значение, умноженное на 2, а затем разделить его на 2:

 round(x * 2) / 2  

Вот как это работает:

 lst = [round(i / 6, 3) for i in range(10)] for el in lst:  print(el, 't-gt;', round(el * 2) / 2)  # Output: # 0.0 -gt; 0.0 # 0.167 -gt; 0.0 # 0.333 -gt; 0.5 # 0.5 -gt; 0.5 # 0.667 -gt; 0.5 # 0.833 -gt; 1.0 # 1.0 -gt; 1.0 # 1.167 -gt; 1.0 # 1.333 -gt; 1.5 # 1.5 -gt; 1.5  

Ответ №2:

Попробуй это:-

 total_leaves = 15 # 30,10,20,15 monthly_leaves = round(total_leaves / 12, 2) monthly_leaves_final = 0  leave_one,leave_two = str(monthly_leaves).split('.') leave_one = int(leave_one) leave_two= int(leave_two '0') if len(leave_two)==1 else int(leave_two) if leave_two == 50:  monthly_leaves_final = '%s.%s' % (leave_one, 5)  elif leave_two gt; 50:  monthly_leaves_final = '%s.%s' % (leave_one   1, 0)  elif leave_two lt; 50:  monthly_leaves_final = '%s.%s' % (leave_one, 0) print(monthly_leaves_final)  

Ответ №3:

Один из способов-импортировать математический модуль:

 monthly_leaves = round(total_leaves/12, 2) monthly_leaves_final = 0  decimal = str(float(monthly_leaves)).split('.')[1]  if int(decimal) == 5:  monthly_leaves_final = (monthly_leaves)  elif int(decimal) gt; 50:  monthly_leaves_final = (math.ceil(monthly_leaves))  elif int(decimal) lt; 50:  monthly_leaves_final = (math.floor(monthly_leaves))