DJC*_*DJC 4 sqlite floating-point floating-accuracy where-clause
我正在基于Android的SQLite数据库中放置一个浮点数,如下所示:
private static final String DATABASE_CREATE =
"create table " + DATABASE_TABLE + " ("
+ KEY_ID + " integer primary key autoincrement, "
+ KEY_FLOAT + " REAL, " + ...
...
content.put(KEY_FLOAT, 37.3f);
db.insert(DATABASE_TABLE, null, content);
Run Code Online (Sandbox Code Playgroud)
当我查询表时:
Cursor cursor = db.query(false, DATABASE_TABLE,
new String[] { KEY_ID, KEY_FLOAT, ... },
KEY_LATITUDE + "=37.3",
null, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)
光标变回空白.如果我将float的值更改为37.0它可以正常工作,返回光标中的记录.
我已经测试了一段时间,将数据库列规范从"REAL"更改为"float"等.只要我在小数点后面有任何小数部分,光标返回空.到底是怎么回事?
提前致谢!
37.0在二进制浮点中是完全可表示的,因此您没有任何正常问题.37.3 不能完全表示 - 您的查询不匹配,因为数据库中的值不完全是37.3.
选项:
编辑:我刚刚检查了文档,看起来SQLite不支持十进制非整数类型.我将在上面留下这个建议,因为它与其他数据库中的相同问题有关.
编辑:在许多情况下,Pascal的有效滚动您自己的数字类型的解决方案是一个很好的解决方案.计算出你想要的精度水平,然后相应地进行乘法/除法...所以如果你想要2位小数的精度,你在存储一个值时乘以100,然后在取出它之后除以100.当然,您的查询需要采用"倍增"形式.
归档时间: |
|
查看次数: |
6540 次 |
最近记录: |