2

我正在使用 RawRowMapper 从 ormlite 加载相关列。RawRowMapper 将所有数据作为字符串返回。

观察结果是它截断了双精度值。

示例:插入的数据 -> 57.1117146374

用于存储数据的数据类型 -> Double

直接查询时来自 Ormlite 的数据:-> 57.1117146374(这是正确的,本质上意味着 ormlite 实际上正确存储了数据)

使用映射器时来自 Ormlite 的数据 -> 57.1117(截断数据作为 String[] resultColumns 的一部分出现

知道如何避免它被截断吗?

编辑:

@DatabaseField(columnName = "LAT")
private Double lat;

对象字段:

private double lat;

这里的关键是我得到的 resultcolumns[] 中的字符串已经被截断了。

4

1 回答 1

4

使用映射器时来自 Ormlite 的数据 -> 57.1117(截断数据作为 String[] resultColumns 的一部分出现

问题似乎是Android的方法会截断将double值作为 a 。不知道为什么,但是如果通过在同一列索引上使用来提取结果,则会保留完整的精度。Stringcursor.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, ...)方法来转换并返回带有double字段的自定义对象。

于 2013-09-05T14:14:29.210 回答