Это похоже на полную паранормальную активность для меня. Я получил эту маленькую функцию преобразования данных базы данных в объекты:Неверные значения, возвращаемые с помощью курсора
public List<BudgetSummary> getMonnthlyBalance() {
List<BudgetSummary> list = new ArrayList<BudgetSummary>();
DbAdapter db = new DbAdapter(context);
SQLiteDatabase sqldb = db.open();
MonthlyBalanceSqlSelect sql = new MonthlyBalanceSqlSelect();
Cursor cursor = sql.getCursor(sqldb);
while (cursor.moveToNext()) {
list.add(new BudgetSummary(cursor));
}
cursor.close();
db.close();
return list;
}
MonthlyBalanceSqlSelect
содержит SQL запрос, который я скопировал из отладчика в Sqliteman. Я извлек файл базы данных из приложения. Вот результаты:
Это выглядит идеально подходит для меня. Давайте посмотрим на конструктор BudgetSummary
. Это просто, как провод.
public BudgetSummary(Cursor cursor) {
incomes = cursor.getDouble(cursor.getColumnIndex("incomes"));
expenses = cursor.getDouble(cursor.getColumnIndex("expenses"));
}
Я пошаговый отладчик с каждой итерацией внутри этого конструктора. Оно должно соответствовать данным, приведенным на картинке, но это не ... Вот результаты:
1. incomes: 4732.0 - wrong | expenses: -57.59 - wrong | month and year correct
2. incomes: 4657.0 - correct | expenses: -3714.96 - correct | month and year correct
3. incomes: 708.0 - wrong | expenses: -3383.03 - correct | month and year correct
4. incomes: 5669.48 - wrong | expenses: -5669.48 - wrong | month and year correct
5. incomes: 3278.5 - correct | expenses: -2685.91 - wrong | month and year correct
6. incomes: 4612.5 - wrong | expenses: -2786.78 - wrong | month and year correct
and so on...
Что колдовство это? Я действительно не знаю ... как некоторые ценности могут быть правильными, а остальные - совершенно неожиданно?
Вот запрос SQL. Я сильно подозреваю, что java видит это по-другому, что Sqliteman соответствует this. К сожалению, я не знаю, как это должно выглядеть.
select strftime('%m', b.date) as month , strftime('%Y', b.date) as year, total(case when b.value >= 0 then b.value else 0 end) as incomes, total(case when b.value < 0 then b.value else 0 end) as expenses from budget b, category c where b.category_id = c.id group by month, year order by year desc, month desc
Покажите нам запрос SQL. –
Кроме того, хранение денег в виде плавающей точки - очень плохая идея! –
как бы вы их сохранили? –