3

我在数据库中有不同的列。我使用 ormlite 并使用genericRawResults. 我的代码是这样的:

GenericRawResults<Total> rawResults =
    dao.queryRaw("select items*3 from Items", new RawRowMapper<Total>() {
        public Total mapRow(String[] columnNames,
            String[] resultColumns) throws SQLException {
                   return new Total(new BigDecimal(resultColumns[0]));
        }
        });

结果是一个丢失小数的数字。为什么?

我尝试使用 cast(columnname as REAL) 但结果是一样的。我能做些什么?谢谢。

4

2 回答 2

0

如果没有看到 Sqlite 模式并且没有看到String.item*3

我怀疑这不是ORMLite的问题。我怀疑这是 Sqlite 的限制,因为它使用小精度来进行内部计算。以下是 Sqlite 命令行的示例:

select 11312541243231.01*3;
33937623729693.0  // << note the missing .03

我建议您不要查询中执行*3,而是在将转换为BigDecimal. 我猜是这样的:

BigDecimal big = new BigDecimal(resultColumns[0]);
big.multiply(new BigDecimal(3));
于 2012-06-13T18:53:20.777 回答
0

我找到了解决办法!!!!!!我像这样将 Real 转换为 Varchar:

select id, factory, cast( SUM(Round((cast(Round((cast(price as REAL))*(cast((100-d1)/cast(100 as REAL) as REAL)),3) as REAL))* (cast((100-2)/cast(100 as REAL) as REAL)),3)* cast(units as REAL)) as VARCHAR) from Items group by id, factory

而且我不会丢失小数!!!!

于 2012-06-14T14:55:52.300 回答