Я настоятельно рекомендую не пытаться сделать это по нескольким причинам:
HTMLElement
и позволяют увеличить его, нет никакой гарантии, что он будет работать так, как вы ожидаете. HTMLElement
, вы рискуете назвать коллизии и трудно обнаруживаемые ошибки. Вместо этого я бы предложил создать обертку объекты вокруг узлов DOM как jQuery, YUI и другие библиотеки.
Kangax написал хорошую статью об этом , охватывая все эти точки и многое другое.
Я не знаю стандартной функции в Python, но у меня это работает:
def myround(x, base=5):
return int(base * round(float(x)/base))
def myround(x, base=5):
return base * round(x/base)
Легко понять, почему это работает. Вы хотите убедиться, что ваше число, разделенное на 5, является целым числом, округленным правильно. Итак, сначала мы делаем именно это ( round (float (x) / 5)
где float
требуется только в Python2), а затем, поскольку мы разделили на 5, мы умножаем на 5 также. Последнее преобразование в int
связано с тем, что round ()
возвращает значение с плавающей запятой в Python 2.
Я сделал функцию более универсальной, присвоив ей base
, по умолчанию 5.
Для целых чисел и с Python 3:
def divround_down(value, step):
return value//step*step
def divround_up(value, step):
return (value+step-1)//step*step
Создание:
>>> [divround_down(x,5) for x in range(20)]
[0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15]
>>> [divround_up(x,5) for x in range(20)]
[0, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 20, 20, 20, 20]
А как насчет этого:
def divround(value, step):
return divmod(value, step)[0] * step
Это просто вопрос масштабирования
>>> a=[10,11,12,13,14,15,16,17,18,19,20]
>>> for b in a:
... int(round(b/5.0)*5.0)
...
10
10
10
15
15
15
15
15
20
20
20
round (x [, n]): значения округляются до ближайшего кратного 10 в степени минус n. Итак, если n отрицательно ...
def round5(x):
return int(round(x*2, -1)) / 2
Поскольку 10 = 5 * 2, вы можете использовать целочисленное деление и умножение на 2, а не деление с плавающей запятой и умножение на 5,0. Не то чтобы это имеет большое значение, если вам не нравится сдвиг битов
def round5(x):
return int(round(x << 1, -1)) >> 1
Модифицированная версия divround :-)
def divround(value, step, barrage):
result, rest = divmod(value, step)
return result*step if rest < barrage else (result+1)*step