在android数据库中存储浮点数

Dro*_*idT 3 java sqlite floating-point android

我试图在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); 
Run Code Online (Sandbox Code Playgroud)

Gra*_*and 7

不要使用浮点来存储货币金额.浮点不准确; 正如您所知,浮点比较尤其难以处理.

我通常货币金额在数据库中存储为整数,如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
Run Code Online (Sandbox Code Playgroud)