Android greenDAO 存储浮点数错误

Posted

技术标签:

【中文标题】Android greenDAO 存储浮点数错误【英文标题】:Android greenDAO Storing Floating point numbers wrong 【发布时间】:2014-03-23 23:06:22 【问题描述】:

大家好,我正在使用绿色 DAO 库来创建和操作数据库,并且我在数据库中有一些字段,例如

     Float total;

当我尝试插入值 25.4 时,它正在存储 25.4099998474121

之后,当我从数据库中检索数据时,我得到 25.4099998474121,最终我的所有计算都出错了

请帮助我摆脱困境

谢谢

【问题讨论】:

你能显示一些代码吗?您似乎存储了 25.41 【参考方案1】:

在创建 Sqlite 表时,将浮点字段类型指定为小数(15,2)。这里 2 指定小数位数,15 表示允许的总位数。

我试过下面的代码,效果很好,

create table testing(numberField decimal(15,2))
insert into testing values(9999999999999.99)

但添加更多值会四舍五入。

在您的情况下,您需要插入,

insert into testing values(25.4)

这会将值作为 25.4 准确地插入到 sqlite 数据库中。如果这不起作用,那么您的程序正在分配额外的值或四舍五入。

【讨论】:

我已经指定了相同的,但它在表格中添加了 19 位数字 @SoftwareSainath 我已经更新了答案并尝试在从数据库中检索时分配给 BigDecimal 而不是 Float。

以上是关于Android greenDAO 存储浮点数错误的主要内容,如果未能解决你的问题,请参考以下文章

js,java,浮点数运算错误及应对方法

浮点数引起的错误

float_浮点数存储结构

将作为varchar存储的数字10与浮点数1.1进行比较,会因算术溢出错误而失败

浮点数类型的存储

浮点数的存储与表达