使用Python对SQLITE插入进行2dp舍入
我试图在python中将我的值四舍五入到小数点后2位(使用jupyter笔记本),然后将这些值插入SQLITE3,但有些值没有四舍五入: 请求:使用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),
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;