我对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
答案 0 :(得分:0)
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中的整数表示。
答案 1 :(得分:0)
作为已经提供的一种替代方法,您可以使用字符串格式进行相同的操作(尽管它会截断小数,因此您仍可以事先取整):
>>> '{:,.2f}'.format(0)
'0.00'
>>> '{:,.2f}'.format(15342.62412)
'15,342.62'