Я относительно новичок в 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

0
Dogsgomoo 15 Апр 2019 в 00:26

2 ответа

Лучший ответ

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

0
rassar 14 Апр 2019 в 22:21

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

>>> '{:,.2f}'.format(0)
'0.00'
>>> '{:,.2f}'.format(15342.62412)
'15,342.62'
0
Peter 14 Апр 2019 в 23:02