SQLite如何使用整数来存储价格值

时间:2013-04-26 11:49:57

标签: java android sqlite

我使用真实类型来保存SQLite数据库中的价格值,但它没有正确返回值。如果我保存了一些值1.01,则会返回4.029999999999999。 我已经读过在SQLite中保存价格的最佳方法是使用整数type

但我不知道如何使用它。 在这种情况下如何存储和检索价格? 这里编码我现在检索价格的方式:

    Cursor cursor = null;
    double totalPrice = 0;
    try {
        cursor = mDB.rawQuery("select " + Expense.PRICE + " from " + Expense.TABLE_NAME + " where " + " (strftime("
                + dateType + ", " + Expense.DATE + "))" + "= ? ", new String[] { currentDate });

    } catch (Exception e) {
        Log.e(TAG, "error" + e.toString());
        e.printStackTrace();
    }
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        totalPrice += cursor.getDouble(cursor.getColumnIndex(Expense.PRICE));
    }

2 个答案:

答案 0 :(得分:8)

当你看到它时,它实际上非常简单。

我不知道你所使用的货币,但是假设是美元。

您想存储1.01美元。这与101美分相同。你只需乘以100。

所以在存储号码之前,乘以100。 显示数字时,除以100。


只是添加回答:我还认为你应该将数字存储在内存中作为分数/整数。因此,对于所有工作,计算等,请使用整数格式。

如果用户输入$ amount,请将其直接转换为整数(乘以100)。只有当你需要显示它时才会改回$。

换句话说,不仅仅是在往返数据库时。

答案 1 :(得分:1)

有效的Java书籍在第48项中描述,如果需要确切的答案,则不应使用float或double。

我认为您应该使用长值来存储价格值,但是将值存储为“美分”(或者根据所选择的货币等价而不是“美元”)。这样,围绕价格的数学计算应该可以正常工作,而不会因浮点运算而丢失。