使用Python对SQLITE插入进行2dp舍入

使用Python对SQLITE插入进行2dp舍入,python,sqlite,rounding,Python,Sqlite,Rounding,我试图在python中将我的值四舍五入到小数点后2位(使用jupyter笔记本),然后将这些值插入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),

我试图在python中将我的值四舍五入到小数点后2位(使用jupyter笔记本),然后将这些值插入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()

正如您所看到的,一些值已舍入,但其他值未舍入。是否有其他方法对值进行四舍五入?

我建议将整个调用四舍五入到
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;
选择
测试用户,
四舍五入(总和)(开始时的情况>=)?
然后是24*(朱利安代(结束)-朱利安代(开始))
否则0结束),2)作为用户_和
从测试表
哪里
开始?
分组
测试用户;

顺便说一句,浮点运算是不精确的,因此在Python代码中,小数点后第二位可能仍然是非零数字,但它们并不真正重要。

这些数字看起来很正确。例如,
0.2
不能准确表示为IEEE754双精度,并且
0.2000000029802224
非常接近可以准确存储的最接近的数字。这是否回答了您的问题?
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;