#mysql #python-3.x
#mysql #python-3.x
Вопрос:
Я относительно новичок в python, и я работаю над созданием программы в свое удовольствие, чтобы автоматически генерировать лист продаж. Он имеет несколько функций, которые извлекают необходимые данные из базы данных, а также reportlab и несколько других инструментов для размещения результатов в сгенерированном pdf. Я пытаюсь округлить результаты, поступающие с сервера Mysql. Однако я попал в точку, где я застрял, и все способы, которыми я пытался округлить результаты, выдают код ошибки и не работают. Мне нужно посмотреть несколько примеров, чтобы я мог понять, как это будет работать, и любые соответствующие отзывы, которые помогут мне учиться.
Я пытался использовать функцию mysql round для округления результатов, но это не удалось. Я также попытался округлить результаты как часть функции, которая сама генерирует стоимость единицы. Однако это также не удалось.
Большой объем кода был удален из-за дыры в безопасности, которую он мог бы создать. Предоставленный код должен показать, что я сделал до сих пор. Строка результата печати предназначена для проверки того, что код работает во время разработки. Он не выдает никаких ошибочных результатов и будет удален на последнем этапе проекта.
def upcpsfunc(self, upc):
mycursor = self.mydb.cursor()
command = "Select Packsize from name"" where UPC = %(Upc)s"
mycursor.execute(command, {'Upc': upc})
result = mycursor.fetchone()
print(result[0])
return result[0]
def unitcost(self,upc):
#function to generate unit cost
mycursor = self.mydb.cursor()
command = "Select Concat((Cost - Allow)/Packsize) as total from name
where UPC = %(Upc)s"
mycursor.execute(command, {'Upc': upc})
result = mycursor.fetchone()
print (result[0])
return result[0]
Что касается ожидаемых результатов, я бы предпочел, чтобы команда mysql округляла результаты, прежде чем отправлять их в Reportlab для размещения. Пока результаты составляют 4 или 5 цифр, что не идеально. Я хочу, чтобы результаты имели два знака после запятой, так как это были бы деньги. Желаемый результат — 7,50 вместо 7,5025
Ответ №1:
round
Функция может использоваться для округления чисел:
>>> round(7.5025, 2)
7.5
Чтобы получить дополнительный 0 в конце, вы можете использовать следующий код:
>>> def round_money(n):
s = str(round(n, 2))
if len(s) == 1: # exact dollar
return s ".00"
elif len(s) == 3: # exact x10 cents
return s "0"
return s
>>> round_money(6)
'6.00'
>>> round_money(7.5025)
'7.50'
Обратите внимание, что эта функция возвращает строку, потому 7.50
что не может быть представлена целым числом в python.
Ответ №2:
В качестве альтернативы уже предоставленному способу вы можете сделать то же самое с форматированием строки (хотя десятичные дроби будут усечены, так что вы все равно можете округлить заранее):
>>> '{:,.2f}'.format(0)
'0.00'
>>> '{:,.2f}'.format(15342.62412)
'15,342.62'