java - 在android数据库中存储 float

标签 java android sqlite floating-point

我正在尝试将美元金额存储在 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); 

最佳答案

不要使用 float 来存储货币金额。 float 是不准确的;您已经发现,处理 float 比较特别棘手。

我通常将货币金额作为整数存储在数据库中,例如410.44 将存储为 41044409.00 将存储为 40900

当您需要转换为 410.44 格式进行显示时,您可以使用 BigDecimal 类,将要使用的比例(在本例中为 2)传递给它小数点移动的位数。

例子:

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

关于java - 在android数据库中存储 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364399/

相关文章:

java - 在多线程环境中使用 HttpClient 的最佳实践

java - 获取 HashMap 中最小的可用键 (>= 1)

android - 状态栏颜色不会随着相对布局作为根元素而改变

android - 更改android中的默认 Activity

Android JWT 刷新 token 流程

java - SQLite 数据库在删除命令上锁定

java - 在面板中设置图像图标

wowza - 在 Wowza 中监控推送/目标流消耗的带宽

mysql - IONIC 2 中的 Sqlite : sqlite3_prepare_v2 failure: near\\\"UNION\\\" : syntax error\},\“代码:5} 错误

android - 如何在动态 Spinner 中检索所选项目的 ID?