from math import ceil
def ceil_to_tens(x):
return int(ceil(x / 10.0)) * 10
Редактировать : хорошо, теперь, когда у меня есть незаслуженный значок «Хороший ответ» для этого ответа, я думаю, что сообщество должно найти правильное решение с использованием модуля decimal
, который не страдает от этих проблем :) Спасибо Джеффу за то, что указал на это. Итак, решение с использованием decimal
работает следующим образом:
from decimal import Decimal, ROUND_UP
def ceil_to_tens_decimal(x):
return (Decimal(x) / 10).quantize(1, rounding=ROUND_UP) * 10
Конечно, приведенный выше код требует, чтобы x
был целым числом, строкой или Decimal
объектом - плавающие объекты не будут работать, поскольку это разрушит всю цель использования модуля decimal
.
Жаль, что Decimal.quantize
не работает должным образом с числами больше 1, это спасло бы трюк умножения с делением.