Нужна помощь в округлении результатов Mysql, возвращаемых функцией python - PullRequest
0 голосов
/ 15 апреля 2019

Я относительно новичок в python и в свое удовольствие работаю над созданием программы для автоматического создания листа продаж.Он имеет несколько функций, которые извлекают необходимые данные из базы данных, а также reportlab и несколько других инструментов для помещения результатов в сгенерированный pdf.Я пытаюсь округлить результаты, поступающие с сервера Mysql.Однако я попал в точку, в которой я застрял, и все способы, которыми я пытался округлить результаты, выдают код ошибки и не работают.Мне нужно взглянуть на несколько примеров, чтобы понять, как это будет работать, и любые соответствующие отзывы, которые помогут мне учиться.

Я пытался использовать функцию округления mysql для округления результатов, но это не удалось.Я также попытался округлить результаты как часть функции, которая сама генерирует стоимость единицы.Однако и это не удалось.

Большой объем кода был удален из-за дыры в безопасности, которую он может создать.Код предоставлен, чтобы показать, что я сделал до сих пор.Вывести строку результата, чтобы убедиться, что код работает во время разработки.Он не дает никаких ошибочных результатов и будет удален на последнем этапе проекта.

 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

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Так же, как альтернативный способ, который уже был предоставлен, вы можете сделать то же самое с форматированием строки (хотя оно усекает десятичные дроби, так что вы все равно можете округлить заранее):

>>> '{:,.2f}'.format(0)
'0.00'
>>> '{:,.2f}'.format(15342.62412)
'15,342.62'
0 голосов
/ 15 апреля 2019

Функция 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.

...