获取SQLite中列值的总和

时间:2016-02-17 10:02:03

标签: android sqlite

我在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设置为我的列数据类型但仍然

究竟是什么让我的数字变得圆满?请帮我提出建议。

3 个答案:

答案 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);