我正在使用 RawRowMapper 从 ormlite 加载相关列。 RawRowMapper 将所有数据作为字符串返回。
观察结果是它截断了 double 值。
示例: 插入的数据 -> 57.1117146374
用于存储数据的数据类型 -> Double
直接查询时来自 Ormlite 的数据:-> 57.1117146374(这是正确的,本质上意味着 Ormlite 实际上正确存储了数据)
使用映射器时来自 Ormlite 的数据 -> 57.1117(截断的数据作为 String[] resultColumns 的一部分
知道如何避免它被截断吗?
编辑:
@DatabaseField(columnName = "LAT")
private Double lat;
对象字段:
private double lat;
这里的关键是我得到的 resultcolumns[] 中的字符串已经被截断了。
最佳答案
Data from Ormlite when using mapper -> 57.1117 (Truncated data coming as part of String[] resultColumns
问题似乎是,以 String
形式获取 double
值会被 Android 的 cursor.getString(...)
截断方法。不知道为什么,但如果在同一列索引上使用 cursor.getDouble(columnIndex);
提取结果,则保留完整精度。
我认为这里的解决方案是以不同的方式映射行。如果您使用dao.queryRaw(String, DataType[], ...)
method ,双字段似乎被适当提取。这是我的测试课的示例。
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, RawRowMapper, ...)
method转换并返回带有 double
字段的自定义对象。
关于android - Ormlite RawRowMapper 截断 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620709/