#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))