我正在尝试将美元金额存储在由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);
答案 0 :(得分:7)
请勿使用浮点存储货币金额。浮点数不准确;正如您所知,浮点比较尤其难以处理。
我通常将货币金额存储在数据库中作为整数,例如410.44
将41044
存储为409.00
,40900
将存储为410.44
。
当您需要转换为BigDecimal
格式进行显示时,您可以使用int storedAmount = 41044;
BigDecimal scaledAmount = new BigDecimal(storedAmount);
scaledAmount.setScale(2); // now contains 410.44
类,将要使用的比例(在本例中为2)传递给它,这是要移位的位数小数点。
示例:
{{1}}