我正在尝试将美元金额存储在android提供的sqlite数据库中,但它似乎无法正常工作。仅当我尝试删除不是全部金额的交易时,才会发生此错误。即409.00可以工作,但410.44不能工作。

如果我存储诸如410.44之类的值,然后在数据库中查询该金额,则找不到匹配项。我试图将此字段用作REAL数据类型和TEXT数据类型,但均无效。在下面的示例中,getTransAmount()方法返回一个float。这是我将db数据类型设置为REAL时运行的版本。任何帮助,将不胜感激。谢谢。

cv.put(transAmount, t.getTransAmount());

db.insert(tableName, null, cv);
x = db.delete(tableName, transAmount + " = " + t.getTransAmount(), null);

最佳答案

不要使用浮点数来存储货币金额。 浮点数不正确;如您所知,浮点比较在处理时特别棘手。

我通常将货币金额以整数形式存储在数据库中,例如410.44将存储为41044,而409.00将存储为40900

当需要转换为410.44格式进行显示时,可以使用BigDecimal类,并向其传递要使用的小数位数(在这种情况下为2),即小数点后移的位数。

例:

int        storedAmount = 41044;
BigDecimal scaledAmount = new BigDecimal(storedAmount);
scaledAmount.setScale(2);  // now contains 410.44

10-08 07:15