我正在使用RawRowMapper从ormlite加载相关列。 RawRowMapper将所有数据作为String返回。
观察是它截断了双值。
实施例: 已插入数据 - > 57.1117146374
用于存储数据的数据类型 - >双
直接查询时Ormlite的数据: - > 57.1117146374(这是正确的,实质上意味着ormlite实际上正确地存储了数据)
使用mapper时来自Ormlite的数据 - > 57.1117(截断数据作为String [] resultColumns
的一部分任何想法如何避免它被截断?
编辑:
@DatabaseField(columnName = "LAT")
private Double lat;
对象字段:
private double lat;
这里的关键是resultcolumns []中的字符串,我得到的已被截断。
答案 0 :(得分:4)
使用mapper时来自Ormlite的数据 - > 57.1117(截断数据作为String [] resultColumns
的一部分
问题似乎是将double
值String
作为cursor.getString(...)
被Android的cursor.getDouble(columnIndex);
方法截断。不确定为什么但如果在同一列索引上使用GenericRawResults<Object[]> results =
dao.queryRaw(dao.queryBuilder().selectColumns("lat")
.prepareStatementString(), new DataType[] { DataType.DOUBLE });
CloseableIterator<Object[]> iterator = results.closeableIterator();
try {
assertTrue(iterator.hasNext());
Object[] objs = iterator.next();
assertEquals(foo.doubleField, objs[0]);
} finally {
iterator.close();
}
提取结果,则会保留完整的精度。
我认为这里的解决方案是以不同方式映射行。如果您使用dao.queryRaw(String, DataType[], ...)
method,则似乎会正确提取双字段。这是我的测试课的样本。
double
您还可以使用自定义行映射器和dao.queryRaw(String, RawRowMapper, ...)
method转换并返回带有{{1}}字段的自定义对象。