【发布时间】:2018-08-06 18:14:14
【问题描述】:
我需要将价格存储在我的房间数据库中。我可以有 2 位小数或 3 位小数的小数精度,具体取决于我的应用在哪个国家/地区使用。
在使用android的房间库在sqlite数据库中存储float甚至double值时,它会更改值。例如: 14.54 存储为 14.539999961853
在调试时,我只能在传递给插入的列表中找到该值是 14.54。但是在从 Windows 的 SQLite 浏览器应用程序中检查保存的记录时。我看到价值观发生了变化。我已经使用 sqlite 浏览器手动输入了一个查询,并且该值按原样保存(浮点值而不更改精度)。例如:
("INSERT INTO MYTABLE (ItemPrice) VALUES (14.54)");
以上查询执行成功,插入14.54的float
但在android中使用以下
@Insert
Long[] saveMyTable(final List<MYTABLE> myTable);
MyTable 实体有一个字段为
public float ItemPrice;
在插入上述查询时,值发生了变化
我还尝试将 DB Schema 中的数据类型更改为 real、float、double。但没有任何帮助。
【问题讨论】:
-
不可能!!我在我的房间模型类中使用浮点数,它工作正常。您在插入数据时是否使用浮点数转换了您的值?
-
不是手动的。我使用的是浮点数,但是在将浮点数(在代码中)保存为双精度(在 DB 中)时,它会自动转换值并存储巨大的小数。我下面提到的答案解决了它。
标签: android sqlite android-sqlite android-room