Ваша проблема (не используя целочисленную арифметику) была подметена под вашим ковром для вас Python 3.2:
Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200300.0
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200300.0'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200300
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> repr(15511210043330985984000000 / (479001600 * 6227020800))
'5200299.999999999'
>>> int(15511210043330985984000000 / (479001600 * 6227020800))
5200299
Я озадачен: предположительно вы использовали int()
, потому что поняли, что это создавая ответ float
. Почему вы не приняли (очевидный?) Следующий шаг округления, например
[3.1.3]
>>> int(round(15511210043330985984000000 / (479001600 * 6227020800)))
5200300
?
Пожалуйста, прочитайте о минимальных примерах . Не читая ваш код, я считаю, что вы столкнулись с хорошо известной проблемой, рассмотренной в предыдущих вопросах и ответах, для которых требуется две строки. Имена в телах функций оцениваются при выполнении функции.
funcs = [lambda: i for i in range(3)]
for f in funcs: print(f())
печатает «2» 3 раза, потому что 3 функции идентичны, а «i» в каждом не оценивается до вызова, когда i == 2. Однако
funcs = [lambda i=i:i for i in range(3)]
for f in funcs: print(f())
создает три разные функции, каждая из которых имеет другое фиксированное значение, поэтому печатаются 0, 1 и 2. В вашем заявлении
__cMenu.add_command(label="{}".format(option),
command=lambda: self.filter_records(column, option))
добавьте option=option
до :
, чтобы записать различные значения option
. Возможно, вы захотите переписать в качестве
lambda opt=option: self.filter_records(column, opt)
, чтобы дифференцировать переменную цикла из параметра функции. Если column
изменился в цикле, ему понадобится такая же обработка.