PyODBC - 游标记录值四舍五入

2 投票
1 回答
1141 浏览
提问于 2025-04-16 23:09

我正在写一个Python脚本(使用的是Windows XP上的Python 2.5.1),这个脚本需要连接到一个Microsoft Access(.mdb)数据库,从一个表中读取数据。不过,我在处理某条记录时遇到了一些意外的结果,发现我关注的字段的精度被四舍五入了。

我知道Access表中我关注的字段是双精度(Double)数据类型。但是,导致我发现这个问题的值是1107901035.43948。当我在Python代码中读取这个值并打印出来时,它显示的是1107901035.44。

我想知道是否需要设置pyODBC连接参数或其他什么?我在文档中没有找到相关信息。

以下是我的代码(我的目的是通过识别出我关注的字段中最大值的记录来解决不需要的记录):

conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + pGDB)
conn.autocommit = True
cursor = conn.cursor()

tableList = []
for x in cursor.tables():
    val = str(x[2])
    if val[0:3] <> "MSy":
        if val[0:3] <> "GDB":
            if val[-5:] <> "Index":
                tableList.append(val)

for x in tableList:
    try:
        SQL = "SELECT * FROM %s" % (x)
        cursor.execute(SQL)
        rows = cursor.fetchall()
        counter = 0
        for row in rows:
            counter +=1

        if counter > 1:
            print "Site %s is a multipart basin" % (x)
            SQL = "SELECT MAX(Shape_Area) AS AREA FROM %s" % (x)
            cursor.execute(SQL)
            row = cursor.fetchone()
            val = row.AREA
            print str(val)
            SQL = "DELETE * FROM %s WHERE Shape_Area < %s" % (x, val)
            cursor.execute(SQL)

谢谢,
Tom

1 个回答

0

Django使用Jinja模板,所以你可以用它的四舍五入功能。它的工作原理如下:

template.html

<p>{{ VALUE| round(2, 'floor') }}</p>

你可以查看Jinja的相关文档了解更多信息。

SQL的四舍五入函数也可以完成这个任务:

SQL = "SELECT ROUND(MAX(Shape_Area), 2) AS AREA FROM %s" % (x)

撰写回答