我在数据库中有不同的列。我使用ormlite并使用genericRawResults
执行SQL。我的代码就像:
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]));
}
});
结果是一个丢失小数的数字。为什么?
我尝试使用强制转换(列名为REAL)但结果是一样的。我能做什么?感谢。
答案 0 :(得分:0)
如果没有看到Sqlite架构并且没有看到String
item*3
的{{1}}结果,很难明确知道这里有什么问题。
我怀疑这不是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));
答案 1 :(得分: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
我不会丢失小数!!!!!