Мой код не работает, как я ожидал бы, если одна переменная float имеет 5 цифр, другие - 4, а на них выполняется арифметическая операция. Например:Выполнение арифметики по значениям с плавающей запятой разных размеров
def capacity(self):
mmax = self.mmax.get()
current = self.current.get()
mmin = self.mmin.get()
flag = False
if flag is False:
if mmax.isdigit() and mmin.isdigit() and current.isdigit():
capacity = float(100 * ((float(current) - float(mmin))/(float(mmax) - float(mmin))))
if mmin <= current <= mmax and 0 <= capacity <= 100:
flag = True
else:
self.result = str("Please ensure the values entered correspond to the correct value.")
else:
self.result = str("Please enter only positive integers.")
if flag is True:
self.result = "Capacity: %2.2f" % capacity + '%'
Если mmax = 10000, current = 5000, and mmin = 1000
, self.result = str("Please ensure...")
.
Если mmax = 9999, current = 5000, and mmin = 1000
, self.result = str("Capacity: 44.45%)
.
Что здесь происходит/как я могу решить эту проблему?
Это много 'float's ... Вы можете уточнить, что вы ожидали? Также отметим, что, например, 'if not flag:' предпочтительнее 'if флаг False:', поскольку он лучше подходит для значений false-y, которые * не являются * 'False'. – jonrsharpe
Вы должны проверить значения, которые вы ожидаете, для 'mmax',' current' и 'mmin'. Если я просто заставляю их быть 10000, 5000 и 1000, это дает правильный результат. – spectras
@spectras. Это был вопрос о том, что я получаю 'mmax',' current' и 'mmin' из записи tkinter, которая возвращает строки, и я делал арифметику непосредственно на них перед преобразованием в float/integer. @jonrsharpe Дулей отметил. –