我是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.5,而不是7.5025
发布于 2019-04-15 06:21:41
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'
请注意,此函数返回一个字符串,因为在Python语言中,7.50
不能用整数表示。
发布于 2019-04-15 07:02:04
就像已经提供的一种替代方法,你可以对字符串格式做同样的事情(它会截断小数,所以你仍然可以提前舍入):
>>> '{:,.2f}'.format(0)
'0.00'
>>> '{:,.2f}'.format(15342.62412)
'15,342.62'
https://stackoverflow.com/questions/55680176
复制相似问题