首页 > 解决方案 > 使用 Python for SQLITE Insert 舍入到 2dp

问题描述

我试图在 python 中将我的值四舍五入到小数点后 2 位(使用 jupyter notebook),然后将这些值插入到 SQLITE3 中,但有些值没有四舍五入:

要求:

count = cursor.execute("""SELECT test_user,
                          SUM(CASE WHEN start >= ? THEN round(julianday(end)*24, 1) - round(julianday(start)*24, 1) ELSE 0 END),
                          FROM test_table
                          WHERE start < ?
                          GROUP BY test_user""", (sdate.to_pydatetime(), edate.to_pydatetime())).fetchall()

回复:

[('1', 0, 8.0, 8.0),
 ('2', None, None, None),
 ('3', 0, 7.0, 7.0),
 ('5', 0.20000000298023224, 0.20000000298023224, 0.20000000298023224),
 ('6', 0.19999999552965164, 10.199999995529652, 10.199999995529652),
 ('7', 0.0, 0.0, 0.0),
 ('8', 5.100000001490116, 5.100000001490116, 5.100000001490116)]

如您所见,一些值已四舍五入,但其他值未四舍五入。还有另一种方法来四舍五入吗?

标签: pythonsqliterounding

解决方案


我建议将整个调用四舍五入SUM,而不是组成总和的单个组件:

SELECT
    test_user,
    ROUND(SUM(CASE WHEN start >= ?
                   THEN 24*(JULIANDAY(end) - JULIANDAY(start))
                   ELSE 0 END), 2) AS user_sum
FROM test_table
WHERE
    start < ?
GROUP BY
    test_user;

附带说明一下,浮点运算并不精确,因此在您的 Python 代码中,您可能仍会看到小数点后第二位以外的非零数字,但它们并不重要。


推荐阅读