我在数据库中有不同的列。我使用 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]));
}
});
结果是一个丢失小数点的数字。为什么?
我尝试使用 cast(columnname as REAL) 但结果是一样的。我能做什么?谢谢。
最佳答案
如果没有看到 Sqlite 模式,也没有看到 item*3
的 String
结果,很难具体知道这里出了什么问题。
我怀疑这不是 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));
关于android - 在 Android 下选择带有计算的列时精度丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11014181/