我在SQLite中有一个具有这种结构的表:
String CREATE_TOTAL_PRICE = "CREATE TABLE " + TOTAL_PRICE + "("
+ KEY_TPID + " INTEGER PRIMARY KEY,"
+ KEY_TPRICE + " REAL" + ")";

我正在尝试获取列KEY_TPRICE的所有列值的总和。 我正在使用这种似乎有用的方法:
public int getTotalOfAmount() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT SUM(total_price) FROM " + TOTAL_PRICE, null);
c.moveToFirst();
int i = c.getInt(0);
c.close();
return i;
}

但问题出现在显示值时。
您看到我的数据输入为50.01,5.5
,当得到总和时,我得到的55
并非如此。
当我在外部运行查询时,实际总数为55.51
。
我尝试将REAL,INTEGER, FLOAT,DOUBLE
设置为我的列数据类型但仍然
究竟是什么让我的数字变得圆满?请帮我提出建议。
答案 0 :(得分:1)
您最好将价格保存为数据库中的TEXT,并在计算总和时,将它们转换为double或BigDecimal以获得准确的结果。
答案 1 :(得分:1)
将您的返回值更改为双倍
public int getTotalOfAmount() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT SUM(total_price) FROM " + TOTAL_PRICE, null);
c.moveToFirst();
double i = c.getDouble(0);
c.close();
return i;
}
答案 2 :(得分:1)
我认为你收到了55,因为你正在读它“int”
int i = c.getInt(0);
这就是它被“转换”为int(55)的原因。
根据问题https://stackoverflow.com/a/17947203/4860513,似乎SUM()将返回与您正在阅读的列的格式相同的数字。所以,尝试读取是一个double / float并分享结果:
float i = c.getFloat(0);
double i = c.getDouble(0);