请问sqlite中精度的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问sqlite中精度的问题相关的知识,希望对你有一定的参考价值。

1:我表中有一个字段是浮点数,如120.241582, Java 用mybatis 连接sqlite,把结果写到excel中,写出的结果是120.2415819999999,这样的,但是有的是好的,如120.241232这种保留6位小数的,请问高手为什么?

2:sqlite中做除法运算,select sum(id) /100 from test ,sum值是10,出来的结果是0,oracle中是0.1,我想让整数除法中,保留小数,该怎么办?

1.浮点本来就不完全精确,这个结果很正常。想要完全精确的小数,就不要用浮点,用java.math.BigDecimal来计算。
2.select sum(id)/100.0 from test追问

1:数据库中120.241582,写出的结果是120.2415819999999,oracle中就没有这个问题,sqlite有办法让他保留六位小数吗?
2:有没有别的办法,我除100,结果也会出来浮点型

追答

1. 这是sqlite实现的问题,只能存成这样的浮点,但是可以用round(数值,数位)来取四舍五入,应该可以搞定。
2. 除非你把id这个字段的类型改成real, 否则两个整型相除结果还是整数。

参考技术A 1.浮点数运算都有这个问题,不好控制,除非你把数据类型定义为整数.
2.试试看/100.0,可能是系统按照整数类型进行运算了。追问

1:数据库中120.241582,写出的结果是120.2415819999999,oracle中就没有这个问题,sqlite有办法让他保留六位小数吗?
2:有没有别的办法,我除100,结果也会出来浮点型

追答

保留6位使用round函数
当然要浮点,否则结果就是0了

参考技术B 数据库中此字段使用decimal(s,p)类型就可以解决这个问题,我今天遇到的这个问题,从网上搜没人回答这个问题,所以就在这回答一下,希望能帮助那些遇到这个问题不知怎么解决的人

android如何用SQLite 的query方法查询某行某列的值,也就是两个限制条件,请问参数怎么写?

SQLiteDatabase 给我提供的方法很不实用,还是建议楼主自己写sql语句,参数想怎么传都可以
例如:Cursor c = db.rawQuery("select * from user where username=? and password = ?",
new Stirng[]"用户名","密码");

如果你非要调用SQLiteDatabase的query方法,那可以这样
db.query("表名", new String[]"字段1,字段2", "条件1=? and 条件2=?", new String[]"条件1的值,条件2的值",null,null,null)
参考技术A db.query("表名", new String[]"要查询的字段名1,要查询的字段名2", "条件名1=? and 条件名2=?", new String[]"条件1的值,条件2的值",追问

括号里面还要其它参数吗,还少一个后括号,是不是还要添加什么呢

追答

query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。

这个应该能看懂吧,不需要的条件就写 null

以上是关于请问sqlite中精度的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite 中存储浮点值会更改 Room DB 中的小数精度

我可以在flift的sqlite表中插入双精度或字符串列表吗?

请问下android studio中的数据库sqlite怎么打开来查询编辑

请问 Delphi 2010中怎么使用(安装)Sqlite数据库?

请问Sqlite 中 string和text 两种数据类型有啥区别

大神们,请问一下,如何用java操作实现数据从mysql到sqlite的导入导出