Я здивований, що ще не бачив цієї відповіді round(x + 0.4999)
, тому збираюся її відкласти. Зауважте, що це працює з будь-якою версією Python. Зміни, внесені в схему округлення Python, ускладнили ситуацію. Дивіться цю публікацію .
Без імпорту я використовую:
def roundUp(num):
return round(num + 0.49)
testCases = list(x*0.1 for x in range(0, 50))
print(testCases)
for test in testCases:
print("{:5.2f} -> {:5.2f}".format(test, roundUp(test)))
Чому це працює
Від док
Для вбудованих типів, що підтримують round (), значення округляються до найближчого кратного 10 до потужності мінус n; якщо два кратні однаково близькі, проводиться округлення до рівномірного вибору
Тому 2,5 округляється до 2, а 3,5 округляється до 4. Якщо це не було, то округлення можна зробити, додавши 0,5, але ми хочемо уникнути попадання до точки на півдорозі. Отже, якщо ви додасте 0,4999, ви наблизитеся, але з достатньою маржею, щоб бути округленою до того, що ви зазвичай очікували. Звичайно, це не вдасться, якщо x + 0.4999
дорівнює [n].5000
, але це малоймовірно.
round(number + .5)
не працює, якщо число є цілим числом.round(3+.5) == 4
, коли ти насправді хочеш3
.